清风明月名字 发表于 2013-11-29 14:24:27

求批量替换单行或多行文字的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)
)






Atsai 发表于 2014-1-10 08:46:11

看不懂楼主的需求,附加的檔是地质资料,
是要依文字檔里的资画画成地质剖面图吗?

还是文字檔是原始资料,dwg檔是完成的成果,
想要修改文字檔,执行LISP,自动修改dwg里的成果。

清风明月名字 发表于 2014-1-10 12:06:45

Atsai 发表于 2014-1-10 08:46 static/image/common/back.gif
看不懂楼主的需求,附加的檔是地质资料,
是要依文字檔里的资画画成地质剖面图吗?



文本文件中是替换的配对,比如1镡一表示1要替换成一,2镡二表示2要替换成二...其它类推。 这些替换配对是放在文本文件中,用来对CAD中的单行或多行文本进行替换。
比如文本文件中有100个替换配对,我操作一次LISP代码W,W就会去读取文本文件中的配对(100对),我再选中单行或多行文本,它就会对单行或多行文本进行100次替换
页: [1]
查看完整版本: 求批量替换单行或多行文字的LSP源代码