guwenjiang 发表于 2016-6-24 08:57:31

如何用这个TXT替换表在CAD中全字批量替换?

如何利用已有的替换表(txt格式),在CAD中进行批量全字匹配替换呢?替换换表如下所示,用左列的数据替换成右列的数据,并且是全字匹配替换,不然会出错。请大神赐教一二
95,97
94,96
91,95
90,94
84,93
83,92
82,91
81,90
80,89
79,88
78,87
77,86
76,85
。。。。。。



mikewolf2k 发表于 2016-6-24 09:44:48

赐教什么呢?算法?就是遍历所有文字,然后遍历列表,满足需要就替换;代码?lisp不会,不过论坛中已有很多文本替换的例子,足够参考了。另外考虑清楚替换列表的逻辑性,是找到一个就结束还是继续找到结束,比如82替换为91,接着又被替换为95,再继续被替换为97?

guwenjiang 发表于 2016-6-24 14:26:59

mikewolf2k 发表于 2016-6-24 09:44 static/image/common/back.gif
赐教什么呢?算法?就是遍历所有文字,然后遍历列表,满足需要就替换;代码?lisp不会,不过论坛中已有很多 ...

我有个程序但是不能够实现全字匹配替换,会出错,不知道怎么改,大神指导一下吧

mikewolf2k 发表于 2016-6-24 15:07:52

LISP不会,只会VBA。等别的高人吧。

ZZXXQQ 发表于 2016-6-25 06:38:51

;批量换字高 明经 ZZXXQQ 2016-6-25
(defun c:tt ( / oldlst newlst)
(setq fn (if (/= (type fn) 'STR) "" fn))
(setq fn (getfiled "请选择替换字高的文件" fn "txt" 2))
(setq fp (open fn "r"))
(while (setq data (read-line fp))
(setq num (vl-string-position (ascii ",") data))
(setq oldlst (cons(atoi(substr data 1 num)) oldlst))
(setq newlst (cons(atoi(substr data (+ num 2))) newlst))
)
(close fp)
(setq chlst (mapcar 'cons (reverse oldlst) (reverse newlst)))
(if (setq ss (ssget '((0 . "TEXT"))))
(repeat (setq i (sslength ss))
   (setq ent (entget(ssname ss (setq i (1- i)))))
   (setq h (fix(cdr(assoc 40 ent))))
   (if (setq oldh (assoc h chlst))
    (entmod (subst (cons 40 (cdr oldh)) (assoc 40 ent) ent))
   )
)
)
(princ)
)

hiviki 发表于 2016-6-27 09:10:08

楼主试试以前版本的天正试试,比如天正结构8.2,还是8.5,可以把你要替换的文字全部选中,然后双击弹出编辑框,把txt中的文字复制过去,就可以了
页: [1]
查看完整版本: 如何用这个TXT替换表在CAD中全字批量替换?