批量替换
能不能实现这样一个过程“把准备替换成的诸多文字按一定顺序写到txt文件里面,下一步读取txt里面的文字,然后逐一拾取CAD里面所要替换的文本,完成替换拾取的对象,并保持文字位置不变zyhandw 发表于 2012-10-13 17:06 static/image/common/back.gif
你的意思是把“*省节水增粮行动”都替换为“河南省节水增粮行动”呗?
我试过了,没问题啊!
只不过我是 ...
为什么我的CAD2010版本运行不了呢?命令栏显示如下:
; 错误: 参数类型错误: lselsetp nil
命令: zyhandw 发表于 2012-10-12 15:56
在你写的这一段基础上改了下,没有经过严格测试,你可以试试(以逗号分隔为例,比如将123替换为a,456替换 ...
以下程序,为上面所改。还需要完善的,
(1)属性块,块中的文字,还是无法改。
(2)多行文本,改了不能立马展现,需要再运行一次程序。
(defun c:tt (/ ff data num txtcontent txtcontent2 txtlst ss i ssn endata)
;**********读取txt文件
;;;(setq data_file (getfiled "请选择字符替换的文本" "d:\\test1" "txt" 2))
(SETQ data0 '(
"Q235-A,Q235-B"
"T1,TA"
"T2,TB"
"T3,TC"
"T4,TD"
"T5,TE"
"T6,TF"
)
ii 0
)
;;;(setq ff (open data_file "r"));打开文件
;;;(setq data (read-line ff)) ;读取一行
(SETQ DATA (NTH ii data0))
(while data
(setq ii (1+ ii))
(setq num (vl-string-position (ascii ",") data))
;***********拾取替换文本
(setq txtcontent (substr data 1 num))
(setq txtcontent2 (substr data (+ num 2)))
(setq txtlst (list '(0 . "TEXT,MTEXT") (cons 1 txtcontent)))
(setq ss (ssget "X" txtlst)) ;;全匹配
;;;(setq ss (ssget txtlst))
(if ss (progn
(setq i 0)
(repeat (sslength ss)
(setq ssn (ssname ss i))
(setq endata (entget ssn))
(setq endata (subst (cons 1 txtcontent2) (assoc 1 endata) endata))
(entmod endata) ;;界面刷新
(setq i (1+ i))
)
)
;***********完成替换
(SETQ DATA (NTH ii data0))
)
)
)
yaya-54 发表于 2015-3-3 16:10
可以EXCEL表中的一序列数据放到CAD中替换?
同问,解决了吗?有相关回帖吗? 可以实现 sscylh 发表于 2012-10-10 15:39 static/image/common/back.gif
可以实现
(defun c:test1()
;**********读取txt文件
(setq data_file (getfiled "C:\\LL\\test1" "txt" 2))
(setq ff (open dat_file "r"))
(setq data (read-line ff))
;***********拾取替换文本
(setq ss (ssget '((0 . "text"))))
(princ "拾取选取对象")
(setq i 0)
(repeat (sslength ss)
(setq ssn (ssname ss i))
(setq endata (entget ssn))
;***********完成替换
(while data
(setq data(read-line ff))
(entmod (subst (cons i "txt") (assoc i endata) endata))
(setq i (1+ i))
)
)
请指教 是啊,我也学习一下哈! 本帖最后由 zyhandw 于 2012-10-12 16:17 编辑
在你写的这一段基础上改了下,没有经过严格测试,你可以试试(以逗号分隔为例,比如将123替换为a,456替换为b,"G:\\"下test1.txt文件中格式就写为:第一行123,a;第二行 456,b)
(defun c:test(/ ff data num txtcontent txtcontent2 txtlst ss i ssn endata)
;**********读取txt文件
(setq data_file (getfiled "请选择字符替换的文本" "G:\\test1" "txt" 2))
(setq ff (open data_file "r"))
(setq data (read-line ff))
(while data
(setq num (vl-string-position (ascii ",") data))
;***********拾取替换文本
(setq txtcontent (substr data 1 num))
(setq txtcontent2 (substr data (+ num 2)))
(setq txtlst (list '(0 . "TEXT") (cons 1 txtcontent)))
(setq ss (ssget "x" txtlst))
(setq i 0)
(repeat (sslength ss)
(setq ssn (ssname ss i))
(setq endata (entget ssn))
(setq endata (subst (cons 1 txtcontent2) (assoc 1 endata) endata))
(entmod endata)
(setq i (1+ i))
)
;***********完成替换
(setq data (read-line ff))
)
) zyhandw 发表于 2012-10-12 15:56 static/image/common/back.gif
在你写的这一段基础上改了下,没有经过严格测试,你可以试试(以逗号分隔为例,比如将123替换为a,456替换为 ...
谢谢,怎么会显示参数类型错误呢? zxl01615 发表于 2012-10-13 12:16 static/image/common/back.gif
谢谢,怎么会显示参数类型错误呢?
把你的dwg和txt传上来,看看 zyhandw 发表于 2012-10-13 13:35 static/image/common/back.gif
把你的dwg和txt传上来,看看
不好意思,中午出去了,刚看到,麻烦您帮我看一下,谢谢 zxl01615 发表于 2012-10-13 15:44 static/image/common/back.gif
不好意思,中午出去了,刚看到,麻烦您帮我看一下,谢谢
你的意思是把“*省节水增粮行动”都替换为“河南省节水增粮行动”呗?
我试过了,没问题啊!
只不过我是把所有图面上的文字进行对应替换!
如果你想拉框选取,可以把(setq ss (ssget "x" txtlst))改为(setq ss (ssget txtlst))就行了!