乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 98|回复: 18

[编程交流] 查找并替换不带

[复制链接]

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 08:27:15 | 显示全部楼层 |阅读模式
我正在寻找一种自动查找和替换的方法。我有大量带有特定文字符号“D.F.”的图纸需要更改为“DF”。我想通过在工具栏上创建一个lisp和一个图标来为我的用户实现自动化。
我试着在工具栏图标上的宏中写入它,但我不知道如何通过对话框。
谁能给我指出正确的方向,或者用Lisp程序的Lisp程序就能做到?
提前感谢
回复

使用道具 举报

0

主题

269

帖子

279

银币

限制会员

铜币
-4
发表于 2022-7-6 08:32:22 | 显示全部楼层
你看过这个论坛中类似的帖子吗,如本页底部所示?这个话题已经提过几次了。
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 08:36:07 | 显示全部楼层
是的,这就是我决定发布这个问题的原因。我在找更具体的东西。
谢谢
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-6 08:39:27 | 显示全部楼层
试试这个,但是很快又脏
 
  1. (defun C:RT (/ acapp acsp adoc adocs fn fold full_name_list)
  2. (or (vl-load-com))
  3. (setq        fn               (getfiled "Select *ANY .DWG FILE* in a desired folder : "
  4.                          ""
  5.                          "dwg"
  6.                          4
  7.                )
  8. fold               (vl-filename-directory fn)
  9. full_name_list (vl-directory-files fold "*.dwg" 1)
  10. full_name_list (mapcar (function (lambda (x)
  11.                                    (strcat fold "\" x)
  12.                                  )
  13.                        )
  14.                        full_name_list
  15.                )
  16. )
  17. (setq        acapp (vlax-get-acad-object)
  18. adocs (vla-get-documents acapp)
  19. )
  20. (foreach fl full_name_list
  21.    (setq adoc (vla-open adocs fl :vlax-false))
  22.    (setq acsp (vla-get-modelspace adoc))
  23.    (vlax-for lt (vla-get-layouts adoc)
  24.      (vlax-for        obj (vla-get-block lt)
  25. (if (eq "AcDbText" (vla-get-objectname obj))
  26.   (if (eq "D.F." (vla-get-textstring obj))
  27.     (vla-put-textstring obj "DF")
  28.   )
  29. )
  30.      )
  31.    )
  32.    (vla-save adoc)
  33.    (vla-close adoc)
  34. )
  35. )
  36. (princ "\n\t***\tStart command with RT\t***")
  37. (princ)

 
~'J'~
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 08:43:26 | 显示全部楼层
非常感谢你。我把它都设置好了,但它并没有切换文本。“D.F.”与其他文本在一个字符串中。这个lisp是否只能查找一个只有“D.F.”的文本字符串?
回复

使用道具 举报

CAB

29

主题

781

帖子

430

银币

中流砥柱

Rank: 25

铜币
526
发表于 2022-7-6 08:44:41 | 显示全部楼层
这就是为什么。
替换此:
  1.           (if (eq "D.F." (vla-get-textstring obj))
  2.     (vla-put-textstring obj "DF")
  3.   )

有了这个:
  1.           (if (wcmatch (vla-get-textstring obj) "*D.F.*")
  2.     (vla-put-textstring obj
  3.              (vl-string-subst "DF" "D.F."(vla-get-textstring obj)))
  4.   )
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 08:50:27 | 显示全部楼层
驾驶室
非常感谢你的帮助。
一次只能为一个图形编写此代码吗。
似乎这个代码要求我选择一个。dwg文件,但它贯穿了所有。特定文件夹中的dwg。
再次感谢。
回复

使用道具 举报

CAB

29

主题

781

帖子

430

银币

中流砥柱

Rank: 25

铜币
526
发表于 2022-7-6 08:52:02 | 显示全部楼层
当然,试试这个:
  1. ;;  Code by Fatty Mod by CAB
  2. (defun C:RT (/ acapp acsp adoc adocs fn)
  3. (vl-load-com)
  4. (if (setq fn (getfiled "Select .DWG FILE to replace text : " "" "dwg" 4))
  5.    (progn
  6.      (setq acapp (vlax-get-acad-object)
  7.            adocs (vla-get-documents acapp)
  8.      )
  9.      (setq adoc (vla-open adocs fn :vlax-false))
  10.      (setq acsp (vla-get-modelspace adoc))
  11.      (vlax-for lt (vla-get-layouts adoc)
  12.        (vlax-for obj (vla-get-block lt)
  13.          (if (eq "AcDbText" (vla-get-objectname obj))
  14.            (if (wcmatch (vla-get-textstring obj) "*D.F.*")
  15.              (vla-put-textstring obj
  16.                (vl-string-subst "DF" "D.F." (vla-get-textstring obj))
  17.              )
  18.            )
  19.          )
  20.        )
  21.      )
  22.      (vla-save adoc)
  23.      (vla-close adoc)
  24.    )
  25. )
  26. (princ)
  27. )
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 08:55:01 | 显示全部楼层
驾驶室
谢谢,我明天试试。这段代码看起来不适用于。我当前将使用的dwg。看起来用户仍然需要手动选择一个。图纸。我正在寻找它来改变我所在的图纸中的文字。
如果我听起来像个讨厌鬼,我很抱歉。我真的很感谢以上所有信息。
再次感谢
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-6 08:58:57 | 显示全部楼层
这是经过编辑的版本,抱歉耽搁了
 
  1. (defun C:RT (/ acapp acsp adoc adocs fn fold full_name_list st)
  2. ;; local defun  
  3. ;; by Michael Puckett
  4. (defun Replace ( oldText newText text / i )
  5. (if (/= oldText newText)
  6. (while (setq i (vl-string-search oldText text))
  7. (setq text
  8. (vl-string-subst
  9. newText
  10. oldText
  11. text
  12. i
  13. )
  14. )
  15. )
  16. )
  17. text
  18. )
  19. (or (vl-load-com))
  20. (setq        fn               (getfiled "Select *ANY .DWG FILE* in a desired folder : "
  21.                          ""
  22.                          "dwg"
  23.                          4
  24.                )
  25. fold               (vl-filename-directory fn)
  26. full_name_list (vl-directory-files fold "*.dwg" 1)
  27. full_name_list (mapcar (function (lambda (x)
  28.                                    (strcat fold "\" x)
  29.                                  )
  30.                        )
  31.                        full_name_list
  32.                )
  33. )
  34. (setq        acapp (vlax-get-acad-object)
  35. adocs (vla-get-documents acapp)
  36. )
  37. (foreach fl full_name_list
  38.    (setq adoc (vla-open adocs fl :vlax-false))
  39.    (setq acsp (vla-get-modelSpace adoc))
  40.    (vlax-for lt (vla-get-layouts adoc)
  41.      (vlax-for        obj (vla-get-block lt)
  42. (if (eq "AcDbText" (vla-get-objectname obj))
  43.   (if (wcmatch (setq st (vla-get-textstring obj)) "*D.F.*")
  44.     (vla-put-textstring obj (Replace "DF" "D.F." st))
  45.   )
  46. )
  47.      )
  48.    )
  49.    (vla-save adoc)
  50.    (vla-close adoc)
  51. )
  52. )
  53. (princ "\n\t***\tStart command with RT\t***")
  54. (princ)
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-7 09:11 , Processed in 0.582948 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表