明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4765|回复: 16

[提问] 这样选择文字,能不能实现呢

  [复制链接]
发表于 2014-7-13 15:32:20 | 显示全部楼层 |阅读模式
5明经币
本帖最后由 dhy 于 2014-7-16 16:59 编辑

源码如下,如果让它选择DAT文件里面的文字是,从多字到单子优先选择呢?
如果没有优先选择,比如当图中如果是AAAA的时候,原来替换成3的,可是现在替换成46了,当图中如果是AAAAAA的时候,原来替换成1的,可是现在替换成456了.这不是我想要的结果。当DAT文件里面没有AAAA而图中出现时,则替换出来一个是2个AA,即是5 5,其他的类推请高手帮忙改一下,这个如果实现了,可以减轻我的工作负担。谢谢!!!
(defun c:fy

附件: 您需要 登录 才可以下载或查看,没有账号?注册
 楼主| 发表于 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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

发表于 2014-7-13 16:59:35 | 显示全部楼层
  1. (defun c:tt ()  (setvar "cmdecho" 0)
  2.   (princ "\n选择文本: ")
  3.   (if (setq ss (ssget '((0 . "text"))))
  4.     (progn
  5.       (setq lst '(("AAAAAA" 1) ("AAAAA" 2) ("AAAA" 3) ("AAA" 4) ("AA" 5)("A" 6) )
  6.             lst1 (mapcar 'car lst)
  7.             i         -1
  8.       )
  9.       (while (setq s1 (ssname ss (setq i (1+ i))))
  10.         (setq tx (xyp-DXF 1 s1))
  11.         (if (setq lst2 (member (strcase tx) lst1))
  12.           (setq nn (- (length lst) (length lst2))
  13.                 tx (itoa (cadr (nth nn lst)))
  14.                 s1 (xyp-SubUpd s1 1 tx)
  15.           )
  16.         )
  17.       )
  18.     )
  19.   )
  20.   (princ)
  21. )

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

 楼主| 发表于 2014-7-13 17:19:42 | 显示全部楼层
本帖最后由 dhy 于 2014-7-13 17:27 编辑

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

点评

给个表文件,无所谓数量多少  发表于 2014-7-13 17:26
回复

使用道具 举报

发表于 2014-7-13 17:31:59 | 显示全部楼层
  1. (defun c:tt ()
  2.   (setvar "cmdecho" 0)
  3.   (princ "\n选择文本: ")
  4.   (if (setq ss (ssget '((0 . "text"))))
  5.     (progn
  6.       (setq lst (xyp-Txt2List "d:\\数据.dat")
  7.             lst (mapcar 'xyp-Str2Lst lst)
  8.             lst1 (mapcar 'car lst)
  9.             i -1
  10.       )
  11.       (while (setq s1 (ssname ss (setq i (1+ i))))
  12.         (setq tx (xyp-DXF 1 s1))
  13.         (if (setq lst2 (member (strcase tx) lst1))
  14.           (setq nn (- (length lst) (length lst2))
  15.                 tx (cadr (nth nn lst))
  16.                 s1 (xyp-SubUpd s1 1 tx)
  17.           )
  18.         )
  19.       )
  20.     )
  21.   )
  22.   (princ)
  23. )
回复

使用道具 举报

 楼主| 发表于 2014-7-14 07:56:45 | 显示全部楼层
xyp1964 发表于 2014-7-13 17:31

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

使用道具 举报

发表于 2014-7-14 09:01:25 | 显示全部楼层
dhy 发表于 2014-7-14 07:56
运行部了,显示:选择对象:  ; 错误: no function definition: XYP-TXT2LIST

要加载XCAD.vlx
回复

使用道具 举报

 楼主| 发表于 2014-7-14 09:58:10 | 显示全部楼层
ZZXXQQ 发表于 2014-7-14 09:01
要加载XCAD.vlx

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

使用道具 举报

 楼主| 发表于 2014-7-14 16:54:15 | 显示全部楼层
没有高手帮我
回复

使用道具 举报

发表于 2014-7-16 16:31:15 | 显示全部楼层
dhy 发表于 2014-7-14 16:54
没有高手帮我

你应该上传一个dat样本,大家才有会针对性。你要的功能应该不难。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-24 07:39 , Processed in 0.197571 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表