明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: ymcui

[已解答] 如何保存文字到.TXT文件指定的那一行

[复制链接]
发表于 2014-12-2 17:34:02 | 显示全部楼层
本帖最后由 wzg356 于 2014-12-2 17:36 编辑
ymcui 发表于 2014-12-2 17:22
那写入要如何写

(defun c:cd (/ nn lst);取得"d:\\ee.TXT"第三行
        (setq lst (reverse (ayFile2List "d:\\ee.TXT")));读取文件成表,每一行一个子表
        (setq hh   3); 行号
        (if (<= hh (length lst))
                (nth (- hh 1) lst)
        )
)
;返回:表==== (第三行内容)

假如第三行内容是:3 4 5 "a"
返回:(3 4 5 "a")
发表于 2014-12-2 17:56:55 | 显示全部楼层
帮你写了一个
  1. (defun c:test()
  2. (write_line_n "d:\\aaa.txt" 5 "acbefg") ;将“abcefg”写进第5行
  3. )
  4. (defun write_line_n (file n str / file_lst opfile i)
  5. (if (findfile file)
  6. (setq file_lst (read_file file))
  7. )
  8. (setq file_line_num (length file_lst))
  9. (if (< file_line_num n) ;如果源文件行数小于n,则插入空格直至n行处插入str
  10. (progn
  11. (repeat (- n file_line_num 1)
  12. (setq file_lst (append file_lst (list "")))
  13. )
  14. (setq file_lst (append file_lst (list str)))
  15. )
  16. (setq file_lst  (ch-lst str (1- n) file_lst)) ;如果源文件行数不小于n,则n行处替换为str
  17. )
  18. (setq opfile (open file "w"))
  19. (setq i 0)
  20. (repeat (length file_lst)
  21.   (write-line (nth i file_lst) opfile) ;重写文件
  22. (setq i (1+ i))
  23. )       
  24.    (close opfile)
  25. )
  26. (defun ch-lst (new i lst) ;; 用新元素new替换表lst中第i项元素
  27.   (if (null lst)
  28.     nil
  29.     (if (zerop i)
  30.       (cons new (cdr lst))
  31.       (cons (car lst) (ch-lst new (- i 1) (cdr lst)))
  32.     ) ))
  33. (defun read_file (file / line_str file_lst opfile path) ;将文件内容读取为list表
  34.      (setq opfile (open file "r"))
  35. (while (setq line_str (read-line opfile))
  36. (setq file_lst (cons line_str file_lst)))
  37.      (close opfile)
  38. (reverse file_lst)
  39. )
发表于 2014-12-2 18:22:54 | 显示全部楼层
本帖最后由 wzg356 于 2014-12-2 21:00 编辑

试试,这个可以了,读文件的函数与地板不同,改为通用函数
  1. ;在文件files第pos行插入行内容str
  2. ;(rewritefile1 "d:\\ee.TXT" 3 "第四行内容")
  3. (defun rewritefile1  (files pos str /  lst);
  4.   (setq lst (mc_getfile files));读取文件成表,每一行为表的一个子项   
  5.   (if (> pos (setq lenlst (length lst)))
  6.     (setq lst (t11  lst lenlst str));插入最后
  7.     (setq lst (t11  lst pos str));插入第pos行
  8.   )
  9.   (rewritetxt files lst ) ;重写文件
  10. )

  11. ;删除文件files第pos行
  12. ;(rewritefile2 "d:\\ee.TXT" 3 )
  13. (defun rewritefile2  (files pos /  lst);
  14.   (setq lst (mc_getfile files));读取文件成表,每一行为表的一个子项
  15.   (if (<=  pos (length lst))
  16.     (setq lst (t11  lst pos nil));删除第pos行
  17.    )
  18.   (rewritetxt files lst ) ;重写文件
  19. )

  20. ;文件files第pos行改写为str
  21. ;(rewritefile3 "d:\\ee.TXT" 3 "第3行新内容")
  22. (defun rewritefile3  (files pos str /  lst);
  23.   (setq lst (mc_getfile files));读取文件成表,每一行为表的一个子项
  24.   (setq lst (t11 lst pos nil));删除第pos行
  25.   (setq lst (t11 lst (- pos 1) str));第pos行插入str
  26.   (rewritetxt files lst ) ;重写文件
  27. )




  28. ;配套通用函数,明经上的

  29. ;函数:mc_getfile 功能:读取文件并按行将文件转换为表
  30. ;返回值:返回一个表,文件中一行被转换为表中的一个项,如果文件不存在,则返回nil
  31. ;语法:(mc_getfile files) 参数:files:文本文件名,如未指定路径则自动在搜索路径中查找文件
  32. ;示例:(mc_getfile "tyl.ini")  
  33. ;函数代码:
  34. (defun mc_getfile(files / tmplst x fn)
  35.   (setq files(findfile files))
  36.   (if files
  37.     (progn
  38.       (setq fn (open  files "r"))
  39.       (while (setq x (read-line fn))
  40.         (setq tmplst(append tmplst(list x)))
  41.       )
  42.       (close fn)
  43.       tmplst
  44.     )
  45.      nil
  46.   )
  47. )

  48. ;============{ 在指定位置删除或插入元素 }===============
  49. ;nil表示要删除。如果有值为要插入的元素---by wowan1314
  50. ;(t11 '(1 2 3 4 5 6) 2 0);;->(1 2 0 3 4 5 6)
  51. ;(t11 '(1 2 3 4 5 6) 2 nil);;->(1 2 4 5 6)
  52. ;2013年7月20日 星期六
  53. (defun t11 (lst pos mod / qlst a hlst)
  54.     (setq a -1)
  55.     (setq hlst (vl-member-if-not
  56.             '(lambda(x)  (setq a (1+ a)) (if (= a pos) nil
  57.                     (setq qlst (cons x qlst))
  58.                 )
  59.             )
  60.             lst
  61.         )
  62.     )
  63.     (if mod
  64.         (apply 'append (list (reverse(cons mod qlst)) hlst))
  65.         (apply 'append (list (reverse qlst) (cdr hlst)))
  66.     )
  67. )

  68. ;根据表重写txt文件
  69. (defun rewritetxt (txtfile lst / dat_file ff i ii tuan )
  70.   (setq ff (open txtfile "w")) ;写文件,如不存在则新建文件,如存在新资料将覆盖旧资料。
  71.   (setq i 1)
  72.   (setq ii (length lst))
  73.   (while (and (/= nil lst) (<=  i ii))
  74.       (setq tuan (car lst))
  75.       (write-line tuan ff)
  76.       (setq lst (cdr lst))
  77.     (setq i (+ i 1))
  78.   )
  79.   (close ff)
  80. )
  1. <div class="blockcode"><blockquote>
复制代码

点评

这个函数可以用来实现软件加密用,  发表于 2014-12-5 20:17
发表于 2014-12-2 19:07:40 | 显示全部楼层
大家都这么热心! 真让人感动!

路过 ...
发表于 2014-12-2 19:20:59 | 显示全部楼层
本帖最后由 wzg356 于 2014-12-2 20:09 编辑

13楼改为通用函数3个,文件删除、改写、插入第n行
 楼主| 发表于 2014-12-3 08:12:25 | 显示全部楼层
谢谢各位大神的帮助,谢谢
发表于 2014-12-5 20:32:13 | 显示全部楼层
本帖最后由 wzg356 于 2014-12-5 20:39 编辑
wzg356 发表于 2014-12-2 18:22
试试,这个可以了,读文件的函数与地板不同,改为通用函数

呵呵,希望"我爱lisp"弄出来加密的dd
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-16 14:35 , Processed in 0.158938 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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