这样选择文字,能不能实现呢
本帖最后由 dhy 于 2014-7-16 16:59 编辑源码如下,如果让它选择DAT文件里面的文字是,从多字到单子优先选择呢?
如果没有优先选择,比如当图中如果是AAAA的时候,原来替换成3的,可是现在替换成46了,当图中如果是AAAAAA的时候,原来替换成1的,可是现在替换成456了.这不是我想要的结果。当DAT文件里面没有AAAA而图中出现时,则替换出来一个是2个AA,即是5 5,其他的类推请高手帮忙改一下,这个如果实现了,可以减轻我的工作负担。谢谢!!!
(defun c:fy
本帖最后由 dhy 于 2014-7-13 17:25 编辑
为什么我的源码没有发出去的呢,效果如图
(defun c:fy
(/ ss fd data aa chi eng ent ent_data old new chi_n chi_o)
(setvar "cmdecho" 0)
(command "undo" "be")
(setq ss (ssget (list (cons 0 "*ext"))))
(setq fd (open (findfile "fanyi.dat") "r"))
(setq data (repeat 4 (read-line fd)))
(while (/= data "EXIT")
(while (= (wcmatch data "*\t*") t)
(setq data (vl-string-subst " " "\t" data))
)
(while (= (wcmatch data "**") t)
(setq data (vl-string-subst " " "" data))
)
(if (and (/= data "") (/= data " "))
(progn
;start if-1
(setq aa (vl-string-position 32 data))
(if (= aa 0)
(progn
(setq data (substr data (+ 2 aa)))
(setq aa (vl-string-position 32 data))
(setq chi (substr data 1 aa))
(setq eng (substr data (+ 2 aa)))
(if (= (ascii (substr eng (strlen eng))) 32)
(setq eng (substr eng 1 (1- (strlen eng))))
)
)
)
(if (/= aa 0)
(progn
(setq aa (vl-string-position 32 data))
(setq chi (substr data 1 aa))
(setq eng (substr data (+ 2 aa)))
(if (= (ascii (substr eng (strlen eng))) 32)
(setq eng (substr eng 1 (1- (strlen eng))))
)
)
)
;
;
(setq n 0)
(while (< n (sslength ss))
(setq ent (ssname ss n))
(setq ent_data (entget ent))
(setq old (assoc 1 ent_data))
(setq chi_o (cdr old))
(setq chi_n (vl-string-subst eng chi chi_o))
(setq new (cons 1 chi_n))
(entmod (subst new old ent_data))
(setq n (1+ n))
)
)
) ;end if-1
(setq data (read-line fd))
)
(command "undo" "end")
(princ)
) ;end fy
DAT文件的
AAAAAA 1
AAAAA 2
AAAA 3
AAA 4
AA 5
A 6
EXIT (defun c:tt ()(setvar "cmdecho" 0)
(princ "\n选择文本: ")
(if (setq ss (ssget '((0 . "text"))))
(progn
(setq lst '(("AAAAAA" 1) ("AAAAA" 2) ("AAAA" 3) ("AAA" 4) ("AA" 5)("A" 6) )
lst1 (mapcar 'car lst)
i -1
)
(while (setq s1 (ssname ss (setq i (1+ i))))
(setq tx (xyp-DXF 1 s1))
(if (setq lst2 (member (strcase tx) lst1))
(setq nn (- (length lst) (length lst2))
tx (itoa (cadr (nth nn lst)))
s1 (xyp-SubUpd s1 1 tx)
)
)
)
)
)
(princ)
) 本帖最后由 dhy 于 2014-7-13 17:27 编辑
这样只能极限那几个字母,如果我的DAT文件里面有几万个字,你这样就达不到我的替换效果了,我只是举个例子,不是说我DAT文件就一定是AAAAAA .AAAAA .AAAA .AAA .AA .A 这几个字母了,其实我DAT文件里面是个表,有非常多的文字。效果如我2楼的动画,错编辑在那里了。 (defun c:tt ()
(setvar "cmdecho" 0)
(princ "\n选择文本: ")
(if (setq ss (ssget '((0 . "text"))))
(progn
(setq lst (xyp-Txt2List "d:\\数据.dat")
lst (mapcar 'xyp-Str2Lst lst)
lst1 (mapcar 'car lst)
i -1
)
(while (setq s1 (ssname ss (setq i (1+ i))))
(setq tx (xyp-DXF 1 s1))
(if (setq lst2 (member (strcase tx) lst1))
(setq nn (- (length lst) (length lst2))
tx (cadr (nth nn lst))
s1 (xyp-SubUpd s1 1 tx)
)
)
)
)
)
(princ)
) xyp1964 发表于 2014-7-13 17:31 static/image/common/back.gif
运行部了,显示:选择对象:; 错误: no function definition: XYP-TXT2LIST dhy 发表于 2014-7-14 07:56 static/image/common/back.gif
运行部了,显示:选择对象:; 错误: no function definition: XYP-TXT2LIST
要加载XCAD.vlx ZZXXQQ 发表于 2014-7-14 09:01 static/image/common/back.gif
要加载XCAD.vlx
ZZXXQQ版主,出手帮我完善我原来的那个程序可以吗?真的等着用,谢谢 没有高手帮我 dhy 发表于 2014-7-14 16:54 static/image/common/back.gif
没有高手帮我
你应该上传一个dat样本,大家才有会针对性。你要的功能应该不难。
页:
[1]
2