解压chm大家都知道很简单。很多时候用hh来看chm是很痛苦的(比如没有增量查找功能),但是只用hh或者7z解压的chm,根本就没有目录(运气好的话,一些电子书会有目录页),而当我们用hh查看时,.hhc才是真正的目录。。

今天实在觉得不能忍受,于是打开perl写了个将.hhc简单转成.htm的脚本程序,代码最终很简单,但区区花了不少时间去尝试XML::Simple(原以为更简单)。

这段代码后悔没早些写出来,那看chm得轻松很多。^_^

另注:如果你想做的是将chm转换成一个带有hhc目录网页的文件夹,这里 有完整解决方案。

--------------------------------------------------------------------------------

use feature qw(say);
use HTML::TreeBuilder;
if ($#ARGV != 1) {
    say "/n/nusage: hhc2idx.pl your.hhc your.htm";
    exit;
}
{
    my $tree = HTML::TreeBuilder->new; # build empty tree
    $tree->parse_file($ARGV[0]); #parse hhc file as HTML
    $tree->elementify(); #optional prevent reparse
   
    @objects = $tree->look_down("_tag","object"); #all object
    #say "there ar $#objects ob";
    for my $ob (@objects) {
        my ($el, $dst, $name);
        $el = $ob->look_down("name", "Local"); #Local val as <a> href URL
        if (defined($el)) {
             $dst = $el->attr('value')
        }
        $el = $ob->look_down("name", "Name");  #Name val as <a> text
        if (defined($el)) {
             $name = $el->attr('value')
        }
        #say sprintf('<a href="%s" >%s</a>', $dst, $name);
        if (defined($dst) && defined($name)) {
            $ob->replace_with(
                sprintf('<a href="%s" >%s</a>', $dst, $name)
                );
        }
    }
    my $outfile;
    open $outfile, ">", $ARGV[1];
    say $outfile $tree->as_HTML("", " "); #say out the new html text
# Now that we're done with it, we must destroy it.
    $tree = $tree->delete;
}

解压chm后由hhc生成html索引页面相关推荐

  1. tar命令解压文件后造成目录权限更改

    Question: 最近在用shell编写软件包的一键部署时发现一个有趣的现象:软件安装包中包含一些第三方的压缩包,这些压缩包本身的用户组权限为root,但解压后的目录的所有者权限却变更为1001,如 ...

  2. Ubuntu系统解压文件后乱码解决方法

    Ubuntu系统使用解压文件常见问题 在Ubuntu18.04下,如果直接解压压缩文件: 右键选择提取到此处 发生乱码. 乱码原因:Windows下生成的zip文件中的编码是GBK/GB2312等,因 ...

  3. 好压 自解压文件解压完成后创建桌面快捷方式并启动

    首先右键点击想要压缩的目标文件夹,右键点击"添加到压缩文件",在弹出的窗口中选择7z格式,然后勾选创建自解压格式,然后点击自解压选项. 进入自解压选项后,点击解压标签,在解压后运行 ...

  4. JAVA解压压缩包后的中文乱码问题

    java代码对于zip压缩包的解压.压缩等等操作,建议使用zip4j.相关的文章有很多,不再赘述.此处只讨论解压缩之后可能出现的中文乱码问题. 问题代码: public static void unZ ...

  5. ubuntu linux下下打开iso文件两种方法,linux Ubuntu的ISO镜像怎么安装啊?解压出来后运行那个文件?...

    匿名用户 1级 2008-09-29 回答 WUBI安装方式(推荐给第一次接触ubuntu,担心安装会出问题的朋友使用) 在8.04的live 光盘支持WUBI安装方式,在光盘的根目录,有一个wubi ...

  6. 解压apk后各文件夹含义

    assets:对应android工程中的assets文件夹下的资源文件,通过AssetsManager进行管理 classe.dex: classes.dex文件是java编译生成的二进制资源文件,是 ...

  7. Ubuntu 解压文件后名称乱码问题

    之前我在使用ubuntu上的QQ下载的其他人的压缩包,打开之后文件名称乱码. 由于中文的Windows使用的是GBK编码,而Linux默认使用UTF-8编码的,如果在Windows打包带中文文件的zi ...

  8. jar文件无法启动,闪退。虚拟机环境DirBuster解压安装后点击DirBuster.jar无法启动界面

    3种解决方法,任选其一即可 1.cmd进入DirBuster的安装目录输入:java -jar DirBuster.jar 2.右键.jar修改打开方式为/java/bin/javaw.exe(推荐) ...

  9. 一个自动生成关键字索引页面的比处理文件

    电脑上资料多了之后,每次找资料很麻烦.因此,匠人写了这个批处理文件. 1.把这个批处理文件放在资料目录. 2.执行它,输入关键字.它回自动搜索整个目录以及下属目录中的所有文件名中包含该关键字的文件,并 ...

最新文章

  1. Win10 Anaconda下TensorFlow-GPU环境搭建详细教程(包含CUDA+cuDNN安装过程)(转载)...
  2. 性能测试-Jmeter
  3. Hyperledger Fabric 核心模块(6)Fabric-ca-server
  4. 【组合数学+动态规划】在如下8*6的矩阵中,请计算从A移动到B一共有____种走法。要求每次只能向上或向右移动一格,并且不能经过P。...
  5. 【干货篇】bilibili:基于 Flink 的机器学习工作流平台在 b 站的应用
  6. pads2007 LISENCE 报错解决方案
  7. 日撸 Java 三百行(71-80天,BP 神经网络)
  8. 网络操作系统之网络操作系统的功能
  9. HFSS 微带线验证和仿真
  10. PnP-AdaNet学习笔记
  11. Selenium根据输入的公司名称来爬取公司的详细信息!
  12. discuzapi插件_discuz 代码api
  13. js+css如何制作(音频)图标【切换播放动画】效果?
  14. iPhone12充电头怎么选
  15. 如何长高青春期后 - 两个简单而成功的方法
  16. [Chromium中文文档]Chrom{e,ium}{,OS}中的硬件视频加速
  17. python实现外星人入侵——3.事件分析
  18. About Dfc environment
  19. 微信小程序实现微信支付的相关操作设置
  20. [洛谷]P1220 关路灯 (#区间dp)

热门文章

  1. Linux/Centos: 服务器TIME_WAIT和CLOSE_WAIT区别及解决方案
  2. 独立经济体——投机者的游戏
  3. CCIE知识点总结——三层技术
  4. pid:1 nid:null exception:channel:can't restart by no select live node
  5. android两个项目依赖关系图,关于android:Android组件化项目搭建遇到的问题记录
  6. 计蒜客信息学入门赛 #16--B
  7. sqlite3出现SQLITE_BUSY错误码的原因以及解决方法
  8. div+css使用padding样式和 important标记实现Firefox和IE6处理带float样式的margi
  9. 计算机科学与技术专业论文定题,计算机科学与技术毕业论文题目(个).doc
  10. 盲盒商城小程序如何实现盲盒玩法