求批量替换单行或多行文字的LSP源代码
本帖最后由 清风明月名字 于 2013-11-29 14:28 编辑我新建了一个文本文件“F:\批量文字替换的配对.txt”,我将替换配对放在里面,形式为
中国镡中华人民共和国
1镡一
2镡二
3镡三
4镡四
我希望使用LSP,可以读取文本文件中的内容,并拆分成一对,再对我选中的图元进行替换,这样一次就可以进行任意多次数的替换。
我还希望代码分成几个插件(只略为修改一点),第1个插件是完全匹配时才替换,第2个插件时,包含才替换;第三个是替换项位于被替换项的最左侧才替换;第四个是替换项位于被替换项的最右侧才替换
替换对象为多行文本及单行文本。
最好不要是伪源码。
我有一个朋友给我的代码可供参考。
(vl-Load-Com)
(defun c:当属性层文本内容右侧不等于文本文件任意行内容时删除它 (/ ss path txt i en n loop txt str txtstr)
(if (and (setq ss (ssget "X" '((0 . "MTEXT,TEXT")(8 . "0000用于图元属性快速输出利用(简称“属性”图层)"))))
; (setq path (getfiled "选择文本文件" "" "txt" 4))
(setq path "F:/仅保留符合本文本文件中内容的CAD文本图元.txt")
)
(progn
(setq txt (Z:ReadTXT path))
(setq i -1)
(while (setq en (ssname ss (setq i (1+ i))))
(setq loop t n -1str (strcase (vla-get-TextString (vlax-ename->vla-object en))))
(if (null (while (and loop (setq txtstr (nth (setq n (1+ n)) txt)))
(if
; (/= str txtstr)
; 判断是否包含
;;; (vl-string-search (strcase txtstr) (strcase str))
(wcmatch str (strcat(vl-princ-to-string txtstr) "*"))
(progn (setq loop nil) T))
)
)
(entdel en)
)
)
)
)
(princ)
)
(defun Z:ReadTXT (path / file txtlst str)
(if (setq fn (findfile path))
(progn
(setq file (open fn "r"))
(setq Txtlst '())
(while (setq str (read-line file))
(setq Txtlst (cons (strcase str) Txtlst))
)
(close file)
)
)
(reverse txtlst)
)
看不懂楼主的需求,附加的檔是地质资料,
是要依文字檔里的资画画成地质剖面图吗?
还是文字檔是原始资料,dwg檔是完成的成果,
想要修改文字檔,执行LISP,自动修改dwg里的成果。 Atsai 发表于 2014-1-10 08:46 static/image/common/back.gif
看不懂楼主的需求,附加的檔是地质资料,
是要依文字檔里的资画画成地质剖面图吗?
文本文件中是替换的配对,比如1镡一表示1要替换成一,2镡二表示2要替换成二...其它类推。 这些替换配对是放在文本文件中,用来对CAD中的单行或多行文本进行替换。
比如文本文件中有100个替换配对,我操作一次LISP代码W,W就会去读取文本文件中的配对(100对),我再选中单行或多行文本,它就会对单行或多行文本进行100次替换
页:
[1]