dhy 发表于 2014-7-13 15:32:20

这样选择文字,能不能实现呢

本帖最后由 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 15:34:39

本帖最后由 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

xyp1964 发表于 2014-7-13 16:59:35

(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:19:42

本帖最后由 dhy 于 2014-7-13 17:27 编辑

这样只能极限那几个字母,如果我的DAT文件里面有几万个字,你这样就达不到我的替换效果了,我只是举个例子,不是说我DAT文件就一定是AAAAAA .AAAAA .AAAA .AAA .AA .A 这几个字母了,其实我DAT文件里面是个表,有非常多的文字。效果如我2楼的动画,错编辑在那里了。

xyp1964 发表于 2014-7-13 17:31:59

(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)
)

dhy 发表于 2014-7-14 07:56:45

xyp1964 发表于 2014-7-13 17:31 static/image/common/back.gif


运行部了,显示:选择对象:; 错误: no function definition: XYP-TXT2LIST

ZZXXQQ 发表于 2014-7-14 09:01:25

dhy 发表于 2014-7-14 07:56 static/image/common/back.gif
运行部了,显示:选择对象:; 错误: no function definition: XYP-TXT2LIST

要加载XCAD.vlx

dhy 发表于 2014-7-14 09:58:10

ZZXXQQ 发表于 2014-7-14 09:01 static/image/common/back.gif
要加载XCAD.vlx

ZZXXQQ版主,出手帮我完善我原来的那个程序可以吗?真的等着用,谢谢

dhy 发表于 2014-7-14 16:54:15

没有高手帮我

springwillow 发表于 2014-7-16 16:31:15

dhy 发表于 2014-7-14 16:54 static/image/common/back.gif
没有高手帮我

你应该上传一个dat样本,大家才有会针对性。你要的功能应该不难。
页: [1] 2
查看完整版本: 这样选择文字,能不能实现呢