明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 7258|回复: 27

批量替换

  [复制链接]
发表于 2012-10-10 14:27 | 显示全部楼层 |阅读模式
能不能实现这样一个过程“把准备替换成的诸多文字按一定顺序写到txt文件里面,下一步读取txt里面的文字,然后逐一拾取CAD里面所要替换的文本,完成替换拾取的对象,并保持文字位置不变
 楼主| 发表于 2012-10-14 10:55 | 显示全部楼层
zyhandw 发表于 2012-10-13 17:06
你的意思是把“*省节水增粮行动”都替换为“河南省节水增粮行动”呗?
我试过了,没问题啊!
只不过我是 ...

为什么我的CAD2010版本运行不了呢?命令栏显示如下:
; 错误: 参数类型错误: lselsetp nil
命令:
回复 支持 1 反对 0

使用道具 举报

发表于 2019-8-6 21:38 | 显示全部楼层
zyhandw 发表于 2012-10-12 15:56
在你写的这一段基础上改了下,没有经过严格测试,你可以试试(以逗号分隔为例,比如将123替换为a,456替换 ...

以下程序,为上面所改。还需要完善的,
(1)属性块,块中的文字,还是无法改。
(2)多行文本,改了不能立马展现,需要再运行一次程序。
  1. (defun c:tt (/ ff data num txtcontent txtcontent2 txtlst ss i ssn endata)
  2. ;**********读取txt文件
  3. ;;;(setq data_file (getfiled "请选择字符替换的文本" "d:\\test1" "txt" 2))
  4. (SETQ data0 '(
  5. "Q235-A,Q235-B"        
  6. "T1,TA"
  7. "T2,TB"
  8. "T3,TC"
  9. "T4,TD"
  10. "T5,TE"
  11. "T6,TF"
  12. )
  13.       ii 0
  14.       )
  15. ;;;(setq ff (open data_file "r"));打开文件
  16. ;;;(setq data (read-line ff)) ;读取一行
  17.   (SETQ DATA (NTH ii data0))
  18. (while data
  19.   (setq ii (1+ ii))
  20. (setq num (vl-string-position (ascii ",") data))
  21. ;***********拾取替换文本
  22. (setq txtcontent (substr data 1 num))
  23. (setq txtcontent2 (substr data (+ num 2)))
  24. (setq txtlst (list '(0 . "TEXT,MTEXT") (cons 1 txtcontent)))
  25. (setq ss (ssget "X" txtlst)) ;;全匹配
  26. ;;;(setq ss (ssget txtlst))
  27.   (if ss (progn
  28. (setq i 0)
  29.   (repeat (sslength ss)
  30.     (setq ssn (ssname ss i))
  31.     (setq endata (entget ssn))
  32.     (setq endata (subst (cons 1 txtcontent2) (assoc 1 endata) endata))
  33.     (entmod endata) ;;界面刷新
  34.     (setq i (1+ i))
  35.   )
  36. )
  37. ;***********完成替换
  38. (SETQ DATA (NTH ii data0))
  39. )
  40.   )
  41. )


发表于 2024-2-3 23:35 来自手机 | 显示全部楼层
yaya-54 发表于 2015-3-3 16:10
可以EXCEL表中的一序列数据放到CAD中替换?

同问,解决了吗?有相关回帖吗?
发表于 2012-10-10 15:39 | 显示全部楼层
可以实现
 楼主| 发表于 2012-10-10 17:55 | 显示全部楼层
sscylh 发表于 2012-10-10 15:39
可以实现

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


请指教

评分

参与人数 1金钱 +15 收起 理由
bzhjl + 15 神马都是浮云

查看全部评分

发表于 2012-10-10 19:20 | 显示全部楼层
是啊,我也学习一下哈!
发表于 2012-10-12 15:56 | 显示全部楼层
本帖最后由 zyhandw 于 2012-10-12 16:17 编辑

在你写的这一段基础上改了下,没有经过严格测试,你可以试试(以逗号分隔为例,比如将123替换为a,456替换为b,"G:\\"下test1.txt文件中格式就写为:第一行123,a;第二行 456,b)

  1. (defun c:test(/ ff data num txtcontent txtcontent2 txtlst ss i ssn endata)
  2. ;**********读取txt文件
  3. (setq data_file (getfiled "请选择字符替换的文本" "G:\\test1" "txt" 2))
  4. (setq ff (open data_file "r"))
  5. (setq data (read-line ff))
  6. (while data
  7. (setq num (vl-string-position (ascii ",") data))
  8. ;***********拾取替换文本
  9. (setq txtcontent (substr data 1 num))
  10. (setq txtcontent2 (substr data (+ num 2)))
  11. (setq txtlst (list '(0 . "TEXT") (cons 1 txtcontent)))
  12. (setq ss (ssget "x" txtlst))
  13. (setq i 0)
  14.   (repeat (sslength ss)
  15.     (setq ssn (ssname ss i))
  16.     (setq endata (entget ssn))
  17.     (setq endata (subst (cons 1 txtcontent2) (assoc 1 endata) endata))
  18.     (entmod endata)
  19.     (setq i (1+ i))
  20.   )
  21. ;***********完成替换
  22. (setq data (read-line ff))
  23. )
  24. )
 楼主| 发表于 2012-10-13 12:16 | 显示全部楼层
zyhandw 发表于 2012-10-12 15:56
在你写的这一段基础上改了下,没有经过严格测试,你可以试试(以逗号分隔为例,比如将123替换为a,456替换为 ...

谢谢,怎么会显示参数类型错误呢?
发表于 2012-10-13 13:35 | 显示全部楼层
zxl01615 发表于 2012-10-13 12:16
谢谢,怎么会显示参数类型错误呢?

把你的dwg和txt传上来,看看
 楼主| 发表于 2012-10-13 15:44 | 显示全部楼层
zyhandw 发表于 2012-10-13 13:35
把你的dwg和txt传上来,看看

不好意思,中午出去了,刚看到,麻烦您帮我看一下,谢谢

本帖子中包含更多资源

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

x
发表于 2012-10-13 17:06 | 显示全部楼层
zxl01615 发表于 2012-10-13 15:44
不好意思,中午出去了,刚看到,麻烦您帮我看一下,谢谢

你的意思是把“*省节水增粮行动”都替换为“河南省节水增粮行动”呗?
我试过了,没问题啊!
只不过我是把所有图面上的文字进行对应替换!
如果你想拉框选取,可以把(setq ss (ssget "x" txtlst))改为(setq ss (ssget txtlst))就行了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-18 20:05 , Processed in 0.152570 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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