查看: 1858|回复: 19
打印 上一主题 下一主题

[教程] 把目录及其下的txt文件做成mdx文件

[复制链接]
  • TA的每日心情
    擦汗
    2021-3-8 17:59
  • 签到天数: 2 天

    [LV.1]初来乍到

    11

    主题

    137

    回帖

    1927

    积分

    解元

    Rank: 5Rank: 5

    积分
    1927
    跳转到指定楼层
    1
    发表于 2014-8-21 09:34:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 lixun305 于 2014-8-21 17:01 编辑

    觉得无用的,也别喷,只是提供了一个揉合txt文件的方法。


    思路来源于 yangxiups 提供的 古代文献藏书13337种.rar,  这个文件解开之后包含多个目录及纯文本(txt)文件,达2.12G之多。
    如果保存这样一个目录结构及文件,非常不方便,一是文件非常大,二是移动非常费时,三是浏览也不甚直观。
    如果保存rar文件,文件倒是小了一半,但是浏览就麻烦了,无论在手机还是在pc上,都要解开,解开后的麻烦同保存目录结构一样。

    于是,想做到如下:
    1. 将这些目录及txt文件揉合成一个文件。
    2. 这个文件尺寸要控制一下,同原始文件相比,要有一定的压缩比例。
    3. 这个文件应该可以直接浏览,无需解开。

    做成mdx就能满足上述。
    例如以 H:\liteature1\古文\古代文献藏书13337种   目录为例。
    1. 做成 古代文献藏书13337种.txt, 进而用 mdxbuilder 做成 古代文献藏书13337种.mdx.
    2. mdxbuilder在制作过程中,会将 原始内容进行压缩,压缩比例甚至可与rar相比。
    3. mdx用 mdict浏览即可。


    编了个小程序,完成功能:
    1. 打开 一个目录。
    2. 对该目录进行遍历。
    3. 在某一个目录下,包含多个目录和txt文件,针对该目录:
       (1) 生成一个主页面,这个页面是所有的txt文件和目录的超级链接,文件和目录之间以点化线间隔。如图。

    主目录以 00000000 xx 标识,目的是在 mdict中居于首位。   右边的文件名以[]括起来,目录名以 【】括起来。  文件和目录可以选择分成多少列(图中是3列)显示,自动对齐。
       (2) 对于每一个目录,都要对应一个条目,点击超级链接,打开的是这个目录对应的页面。 如图:

       (3) 对于每一个文件,也要对应一个主条目和若干个分条目(如果需要的话)。
    由于 mdxbuilder 在对 txt 文件进行处理的时候,要求单个条目的 content < 8M,所以,文件内容大于8M就要遭遇   Content is longer then 8388608  错误,因此,必须对文件进行分割,分成若干份。 那么,为了浏览一个文件的多个部分,就需要在页面上有多个链接,分别指向各个部分。
       当然,对于一个大的txt文件,真要让 mdict把他的内容显示出来,非常费劲,得挺长时间的迟钝(pc端是这样的,手机端还不清楚)。 因此,程序在处理大文件的时候,>8M 的是肯定要处理了,但是,调试发现,哪怕是1M的文本文件在mdict的有窗口中显示也是不可容忍的,因此,程序中可以设置一个分段显示的大小(例如 512K),这样,一个大文件就大致按照 512K一部分分成若干页面。 如图:

    庆余年.txt 这个文件有6.97M,按照512K大小分成了15份。 那么,该文件对应的条目页面上面和下面都有 0 1 2 ...... 14 的超级链接,连到各个部分。


    待续。。。

    示例文件及  古代文献藏书13337种.mdx
    http://pan.baidu.com/s/1sj6pyNz
    .......后者实在太大,网速<70k/s,实在没信心上传。


    程序还得另外提取出来,因为我是在一个大的vc工程下做的,要用到很多的dll库和积累的其它源码,很难萃取出来, 我已发的帖子中牵扯到的许多都是这个工程的一个部分。 倒是有源代码大家可以参考,随后附上。

    喜欢捣鼓程序的同志,可以看下面本程序主要考虑的方面:
    1.  对 mdx 文件的结构需要有一个了解。 因为不处理图片等资源,所以,不会生成 mdd, 因此,要简单很多。
    2. 单个条目内容不能大于 8M,这要求程序必须考虑大文件分割的问题。
        由于 mdcit 浏览时,右侧视图窗口显示文本太多,会造成明显的滞后,影响阅读爽度,所以,即便对于不到8M的文件,也要考虑文件分割的问题。
        文件分割,无非按照“固定”大小,例如 512K= 536870912, 如果文件尺寸<=512K,当然省劲,不用分割,否则,又会面临下述问题:
        例如文件大小  546870912,应该分成两份,第0份  536870912, 第1份 10000000, 但是 第0份,从 0 ~  536870911,如果536870911字节是一个汉字字符的一半位置,就坏了(这是很容易出现的事情)。如果不管,分得的第 0 份和第 1份都会出现若干乱码! 因此, 程序中要 找到 “友好”位置,即: 结束位置必须是下述之一: 是回车换行\r\n 结束的地方; 是<br>结束的地方; 是 空格  结束的地方;是句号。结束的地方; 最不济,是任意一个单字节字符结束的地方。   这样就能保证每一部分都是“好的”。
    3. 文本文件必然含有好多回车换行\r\n,如果不处理,写入到 mdx 源文本文件中后也没啥,但是用mdxbuilder编译,生成 mdx 文件,浏览的时候,文本文件就没有换行了,内容一片庞杂。 为此,程序中要提前将 其中的\r\n替换成html格式需要的  <br> 换行符,这是一个费事操作(有时可能使时间增加几十倍),程序中为了加快速度,要临时分配大内存。
    4. 对html的格式要有点了解,最起码:
       超级链接格式  <a href="entry://00 庆余年" >[庆余年]</a>           
      不带下划线:<a href="entry://00 庆余年" style="text-decoration: none">[庆余年]</a>
    5. 当某一个目录下的文件和子目录很多是,要考虑多列显示,否则,滚动条拖动费劲且浪费空间。  多列显示面临对其问题,本程序考虑:
       假设显示出 3 列,那么最后一列长度可以不管,前2列必须考虑。  第 0 列所有文件的文件名长度的最大值要记录下来,假设为 L0, 第 1 列所有文件的文件名长度的最大值也要记录下来,假设为 L1,这样,排列的时候,处在第 1 列位置的文件,前面的文件(长度设为L)要补充 L0 - L 个空格;同理,处在第 2 列位置的文件也要补充 L1 - L 个空格。
       上述,只是保证每一列,其前面的列,文件的文件名长度经过补充之后达到相同的字符数,这些字符有双字节的(汉字),也有单字节的(英文字母,空格等),不同的字体对这些字符显示所占据的宽度是不相同的,调试发现,宋体能保证相同的字符(字节数)数,宽度相同。
        因此,每一个页面,加入总体字体设置:
        <font face="宋体">
       
       </font>
    6. 如何分配条目文本(及mdx文件的索引)
        为了保证能连接到不重复的目标,对每一个文件及目录,都要有一个唯一的条目文本(因为,不同目录下的子目录,txt文件名很可能相同)。
        程序中做的也不是很完善,只是保证:
        (1) 唯一
        (2) 同一个目录或者文件对应的条目尽量聚集在一起,这样mdict左侧窗口就不是那么凌乱。

    7.  程序中是将 txt 文件融合到了 mdx文件中,最终出来的是一个 mdx文件,我把这种方法叫嵌入。
        其实还有一种方法叫 链接,个人觉得更好。 就是,对某一个文件,在页面中保留它的超级链接,点击该链接,不是打开文件,而是提示另存为。   下载下来后,可以用文本工具查看(例如 pc端的:ultraedit, emeditor; 手机端的anyview等)。
       这种情况下,实际上 txt 文件是视为 资源看待的,同 (jpg, wav, spx?) 地位是等价的,应该存放在 mdd文件中,并且得到压缩处理。
       只是这个我还不知道如何实现,哪位达人知道的话,告知一声,已知  <a href="file:///庆余年.txt">庆余年</a>  不行,在 mdict 下点右键,另存为,一闪而过,没反应。

       进一步的,如果能实现,我就可以将 目录下的任何文件(txt, jpg, rar, ...)做成 mdx, 做成的mdx文件就是一个壳(目录的壳),由他连接到的所有的文件都放置在 mdd 中。 从开放角度讲,这个应该是最终完美的实现。

       程序就要追求完美,不完美的东西给别人就是恶心人。

    ------------------------------------
    已发帖:
    李白诗集 https://www.pdawiki.com/forum/thread-12793-1-1.html
    微词典(英汉汉英) 极限尺寸  https://www.pdawiki.com/forum/thread-11945-1-1.html
    现代汉语词典 制作过程 https://www.pdawiki.com/forum/thread-11859-1-1.html
    mdb格式转成的纯文本mdx(手机内存小的有福了)   https://www.pdawiki.com/forum/thread-11800-1-1.html
    mdb xls mdx dict词库格式相互转换  https://www.pdawiki.com/forum/thread-11657-1-1.html

    该用户从未签到

    4

    主题

    1155

    回帖

    4081

    积分

    贡士

    Rank: 6Rank: 6

    积分
    4081

    灌水大神章小蜜蜂章笑傲江湖章

    2
    发表于 2014-8-21 11:23:52 | 只看该作者
    好主意!强烈支持!
  • TA的每日心情
    擦汗
    2021-3-8 17:59
  • 签到天数: 2 天

    [LV.1]初来乍到

    11

    主题

    137

    回帖

    1927

    积分

    解元

    Rank: 5Rank: 5

    积分
    1927
    3
     楼主| 发表于 2014-8-21 11:28:00 | 只看该作者
    kevinmzm 发表于 2014-8-21 11:23
    好主意!强烈支持!

    兄台,如何插入图片? 我编辑这个帖子没有图片说不清啊

    该用户从未签到

    4

    主题

    1155

    回帖

    4081

    积分

    贡士

    Rank: 6Rank: 6

    积分
    4081

    灌水大神章小蜜蜂章笑傲江湖章

    4
    发表于 2014-8-21 12:06:26 | 只看该作者
    呵呵,我在编东西方便是个外行,只知道回复帖子时编辑界面上有个插入图片的功能。

    该用户从未签到

    4

    主题

    1155

    回帖

    4081

    积分

    贡士

    Rank: 6Rank: 6

    积分
    4081

    灌水大神章小蜜蜂章笑傲江湖章

    5
    发表于 2014-8-21 12:07:18 | 只看该作者
    哦,老兄的图片已经上了!
  • TA的每日心情
    擦汗
    2021-3-8 17:59
  • 签到天数: 2 天

    [LV.1]初来乍到

    11

    主题

    137

    回帖

    1927

    积分

    解元

    Rank: 5Rank: 5

    积分
    1927
    6
     楼主| 发表于 2014-8-21 12:27:52 | 只看该作者
    kevinmzm 发表于 2014-8-21 12:07
    哦,老兄的图片已经上了!


    刚搞对。 先在自己的相册里面上传 图片 *.jpg, 再添加就可以了。
  • TA的每日心情
    擦汗
    2021-3-8 17:59
  • 签到天数: 2 天

    [LV.1]初来乍到

    11

    主题

    137

    回帖

    1927

    积分

    解元

    Rank: 5Rank: 5

    积分
    1927
    7
     楼主| 发表于 2014-8-21 13:03:15 | 只看该作者
    本帖最后由 lixun305 于 2014-8-21 14:36 编辑

    源代码: 自己可以用c实现。

    只是草创,还没有完善。

    mdx.rar

    3.59 KB, 下载次数: 112, 下载积分: 米 -5 粒

    该用户从未签到

    5

    主题

    485

    回帖

    2385

    积分

    解元

    Rank: 5Rank: 5

    积分
    2385

    灌水大神章小蜜蜂章笑傲江湖章

    8
    发表于 2014-8-21 15:46:46 | 只看该作者
    老大,您的工具真的很实用。
    建议:把这个工具分享出来,造福大众吧。如果不好萃取,就全部打包得了。反正现在电脑配置、磁盘空间都不是问题。
  • TA的每日心情
    擦汗
    2021-3-8 17:59
  • 签到天数: 2 天

    [LV.1]初来乍到

    11

    主题

    137

    回帖

    1927

    积分

    解元

    Rank: 5Rank: 5

    积分
    1927
    9
     楼主| 发表于 2014-8-21 15:57:07 | 只看该作者
    本帖最后由 lixun305 于 2014-8-25 10:01 编辑
    ok927 发表于 2014-8-21 15:46
    老大,您的工具真的很实用。
    建议:把这个工具分享出来,造福大众吧。如果不好萃取,就全部打包得了。反正 ...


    好的,我考虑考虑怎么最节省人力。 以前发过一个帖子是将 sqlite mdb xls dict 等格式的数据库转换成mdb或者mdx格式的源文本文件,当时为了单独上传这个工具(因为朋友们的电脑上不能保证有 visual c++的 mfc 运行库),所以,就单独编写的程序,采用静态链接,使得生成的exe文件不依赖于开发环境,只要win2000/xp均可。 但是问题是,我以前积累的大量可重用的代码都无法直接使用,只能复制到这个程序中,由于代码之间关联严重,所以修改很多,有时甚至关联到只能放弃的程度。
    而如果用你说的方法,打包,我也做过,但太不专业了,做出来一个exe,还要配一个或多个dll,甚至开发环境的运行库也要偷偷的在后面帮你装进去,这样才能运行,实在。。。   况且,打包的结果,就为了实现这个小功能,exe文件很大,都让人怀疑是不是留了后门。

    正在打包中,随后上传
    。。。

    该用户从未签到

    10

    主题

    115

    回帖

    759

    积分

    举人

    Rank: 4

    积分
    759
    10
    发表于 2014-8-22 07:42:49 | 只看该作者
    你也看《十二国记》?
  • TA的每日心情
    擦汗
    2021-3-8 17:59
  • 签到天数: 2 天

    [LV.1]初来乍到

    11

    主题

    137

    回帖

    1927

    积分

    解元

    Rank: 5Rank: 5

    积分
    1927
    11
     楼主| 发表于 2014-8-22 07:53:59 | 只看该作者
    吴贯和烬羽 发表于 2014-8-22 07:42
    你也看《十二国记》?

    惭愧,里面的东西没看过几个。 日本的更不看,没那个想法和时间浪费!

    该用户从未签到

    10

    主题

    115

    回帖

    759

    积分

    举人

    Rank: 4

    积分
    759
    12
    发表于 2014-8-22 08:19:10 | 只看该作者
    lixun305 发表于 2014-8-22 07:53
    惭愧,里面的东西没看过几个。 日本的更不看,没那个想法和时间浪费!

    故事不错
  • TA的每日心情
    开心
    昨天 08:29
  • 签到天数: 1643 天

    [LV.Master]伴坛终老

    5

    主题

    1484

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    10256

    笑傲江湖章灌水大神章

    13
    发表于 2014-8-31 14:03:05 | 只看该作者
    手里有2014法律大全txt文件   早就想做成带目录的文件了  在手机里便于查看   盼望楼主做成一个简单的小工具!!!   谢谢!!!
  • TA的每日心情
    开心
    昨天 08:29
  • 签到天数: 1643 天

    [LV.Master]伴坛终老

    5

    主题

    1484

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    10256

    笑傲江湖章灌水大神章

    14
    发表于 2014-8-31 14:05:56 | 只看该作者
    每天都关于此贴........
  • TA的每日心情
    擦汗
    2021-3-8 17:59
  • 签到天数: 2 天

    [LV.1]初来乍到

    11

    主题

    137

    回帖

    1927

    积分

    解元

    Rank: 5Rank: 5

    积分
    1927
    15
     楼主| 发表于 2014-9-3 20:30:42 来自手机 | 只看该作者
    zzzjjjfff 发表于 2014-8-31 14:03
    手里有2014法律大全txt文件   早就想做成带目录的文件了  在手机里便于查看   盼望楼主做成一个简单的小工具 ...

    请大家稍有些耐心,一直在打包这个程序,还没弄好!
  • TA的每日心情
    擦汗
    前天 07:00
  • 签到天数: 1090 天

    [LV.10]以坛为家III

    124

    主题

    1772

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    10477

    灌水大神章小蜜蜂章笑傲江湖章

    16
    发表于 2014-9-3 20:50:41 | 只看该作者
    要多交流交流文本文件,这才是最好的格式。
  • TA的每日心情
    开心
    昨天 08:29
  • 签到天数: 1643 天

    [LV.Master]伴坛终老

    5

    主题

    1484

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    10256

    笑傲江湖章灌水大神章

    17
    发表于 2014-9-4 13:31:43 | 只看该作者
    lixun305 发表于 2014-9-3 20:30
    请大家稍有些耐心,一直在打包这个程序,还没弄好!

    期待楼主!!!!   加油!!!!
  • TA的每日心情
    奋斗
    2020-5-7 23:02
  • 签到天数: 218 天

    [LV.7]常住居民III

    22

    主题

    449

    回帖

    2万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    20519
    19
    发表于 2014-10-11 07:11:57 | 只看该作者
    这个不错,很好!

    该用户从未签到

    0

    主题

    7

    回帖

    26

    积分

    白身

    Rank: 1

    积分
    26
    20
    发表于 2018-3-7 01:41:31 | 只看该作者

    这个不错 给个回复加油