本帖最后由 wzg356 于 2014-12-2 21:00 编辑
试试,这个可以了,读文件的函数与地板不同,改为通用函数- ;在文件files第pos行插入行内容str
- ;(rewritefile1 "d:\\ee.TXT" 3 "第四行内容")
- (defun rewritefile1 (files pos str / lst);
- (setq lst (mc_getfile files));读取文件成表,每一行为表的一个子项
- (if (> pos (setq lenlst (length lst)))
- (setq lst (t11 lst lenlst str));插入最后
- (setq lst (t11 lst pos str));插入第pos行
- )
- (rewritetxt files lst ) ;重写文件
- )
- ;删除文件files第pos行
- ;(rewritefile2 "d:\\ee.TXT" 3 )
- (defun rewritefile2 (files pos / lst);
- (setq lst (mc_getfile files));读取文件成表,每一行为表的一个子项
- (if (<= pos (length lst))
- (setq lst (t11 lst pos nil));删除第pos行
- )
- (rewritetxt files lst ) ;重写文件
- )
- ;文件files第pos行改写为str
- ;(rewritefile3 "d:\\ee.TXT" 3 "第3行新内容")
- (defun rewritefile3 (files pos str / lst);
- (setq lst (mc_getfile files));读取文件成表,每一行为表的一个子项
- (setq lst (t11 lst pos nil));删除第pos行
- (setq lst (t11 lst (- pos 1) str));第pos行插入str
- (rewritetxt files lst ) ;重写文件
- )
- ;配套通用函数,明经上的
- ;函数:mc_getfile 功能:读取文件并按行将文件转换为表
- ;返回值:返回一个表,文件中一行被转换为表中的一个项,如果文件不存在,则返回nil
- ;语法:(mc_getfile files) 参数:files:文本文件名,如未指定路径则自动在搜索路径中查找文件
- ;示例:(mc_getfile "tyl.ini")
- ;函数代码:
- (defun mc_getfile(files / tmplst x fn)
- (setq files(findfile files))
- (if files
- (progn
- (setq fn (open files "r"))
- (while (setq x (read-line fn))
- (setq tmplst(append tmplst(list x)))
- )
- (close fn)
- tmplst
- )
- nil
- )
- )
- ;============{ 在指定位置删除或插入元素 }===============
- ;nil表示要删除。如果有值为要插入的元素---by wowan1314
- ;(t11 '(1 2 3 4 5 6) 2 0);;->(1 2 0 3 4 5 6)
- ;(t11 '(1 2 3 4 5 6) 2 nil);;->(1 2 4 5 6)
- ;2013年7月20日 星期六
- (defun t11 (lst pos mod / qlst a hlst)
- (setq a -1)
- (setq hlst (vl-member-if-not
- '(lambda(x) (setq a (1+ a)) (if (= a pos) nil
- (setq qlst (cons x qlst))
- )
- )
- lst
- )
- )
- (if mod
- (apply 'append (list (reverse(cons mod qlst)) hlst))
- (apply 'append (list (reverse qlst) (cdr hlst)))
- )
- )
- ;根据表重写txt文件
- (defun rewritetxt (txtfile lst / dat_file ff i ii tuan )
- (setq ff (open txtfile "w")) ;写文件,如不存在则新建文件,如存在新资料将覆盖旧资料。
- (setq i 1)
- (setq ii (length lst))
- (while (and (/= nil lst) (<= i ii))
- (setq tuan (car lst))
- (write-line tuan ff)
- (setq lst (cdr lst))
- (setq i (+ i 1))
- )
- (close ff)
- )
- <div class="blockcode"><blockquote>
复制代码 |