找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 973|回复: 3

[LISP程序]:无聊:一个LISP的文件分割程序

[复制链接]
发表于 2007-11-16 09:29:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
因为喜欢在手机和MP4上看长篇章回小说,但是因为网上下的小说经常是一个长文件,打开的时候很慢,需要分割成小的文件,但是网上能找到的文件分割器基本上都是分割成等长的小说,而俺比较喜欢以章回体的方式进行分割,由于俺基本上只会一点点儿LISP编程了,所以就用这个LISP编了一个文件分割程序,基本思路是要用到分割标志,P话少说,先看一下源码:
[php]
(defun c:wf (/ fout id_in id_name put_name putf_i putf_is putfile str-id
                           str-put txt_mum txt_name
                        )
        (setvar "cmdecho" 1)
        (setq ID_Name (getfiled "请选择分割标志文件" "d:/" "txt" 0))
        (setq TXT_Name (getfiled "请选择源文本文件" "d:/" "txt" 0))
        (setq Put_Name (substr TXT_Name 1 (- (strlen TXT_Name) 4)))
        ; 获取源文本文件名,去掉了后缀名
        (if (/= nil (AND
                                        ID_Name
                                        TXT_Name
                                )
                ); Start If 0
                (progn        ; Start Progn  1
                        (setq ID_in (open ID_Name "r"))
                        (setq TXT_mum (open TXT_Name "r"))
                        (setq PutF_I 1); 分割序列文件名编号初始值
                        (setq str-ID (read-line ID_in))        ; 从标志文件中读一行
                        (setq str-put (read-line TXT_mum)) ; 从源文件中读一行
                        (while (/= nil str-ID);         ---While C Start!
                                (if (< PutF_I 10)
                                        (setq PutF_IS (strcat "0" (itoa PutF_I)))
                                        (setq PutF_IS (itoa PutF_I))
                                ); 分割序列文件编号位数统一成两位,不足以0补
                                (setq PutFile (strcat Put_Name PutF_IS ".txt"))
                                        ; 将输出文件与源文件放到同一个目录。
                                (setq fout (open PutFile "a")) ; 以ADD模式打开put文件
                                (while (/= str-id str-put) ; 如ID行不等于PUT行,则写
                                                                           ; 入到put文件,循环。
                                        (write-line str-put fout)
                                        (setq str-put (read-line TXT_mum))
                                )
                                (close fout) ; 关闭输出的分割文件
                                (setq PutF_I (1+ PutF_I)) ; 分割文件编号递增。
                                (setq str-ID (read-line ID_in))
                        ) ;         ---While C End!
                        (if (AND
                                        (= nil str-ID)
                                        (/= nil str-Put)
                                ) ; 处理最后一个章节        Start If 1
                                (progn
                                        (if (< PutF_I 10)
                                                (setq PutF_IS (strcat "0" (itoa PutF_I)))
                                                (setq PutF_IS (itoa PutF_I))
                                        )
                                        (setq PutFile (strcat Put_Name PutF_IS ".txt"))
                                        (setq fout (open PutFile "a"))
                                        (while (/= nil str-put)
                                                (write-line str-put fout)
                                                (setq str-put (read-line TXT_mum))
                                        )
                                        (close fout)
                                )
                        )
                        (close ID_in)
                        (close TXT_mum)
                ); END Progn  1
                (alert "文件未发现!")
        ); END If 0
        (alert (strcat "\n文件" TXT_mum "已被分割成" (itoa PutF_I) "个文件!"))
        (setvar "cmdecho" 1)
        (princ)
)
(prompt "\n文件分割程序: WF; Design by Ahill!")

[/php]

附件中是一个样本文件和一个分割标志文件,请仔细分析这种模式。

有兴趣的像俺一样的入门者可以看一下其中的几个文件相关函数的运用。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 221个

财富等级: 日进斗金

发表于 2013-8-11 09:30:10 | 显示全部楼层
支持下楼主
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1077个

财富等级: 财源广进

发表于 2013-8-11 16:30:46 | 显示全部楼层
能解决自己问题的程序就是好程序,愿我lisp水平也能像楼主一样啊~~~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2018-1-27 17:21:16 | 显示全部楼层
厉害了  谢谢分享谢谢分享谢谢分享谢谢分享谢谢分享谢谢分享
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-18 13:49 , Processed in 0.362340 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表