乐筑天下

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

[编程交流] 全局文本替换(REPSTRING

[复制链接]

36

主题

183

帖子

151

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-6 12:55:15 | 显示全部楼层 |阅读模式
我在脚本中使用REPSTRING LISP来替换整个文件夹中充满图形的文本。我遇到了一个文本替换问题。我想运行一个文本替换,它将找到:5X-123并将其更改为:5X-999。问题是,在一些图纸中存在:15X123、25X-123和35X-123。除了5X-123字符串之外,我不想更改任何内容。有人知道如何在不影响15X-123、25X-123或35X-123字符串的情况下更改5X-123文本字符串吗?
回复

使用道具 举报

4

主题

327

帖子

324

银币

初来乍到

Rank: 1

铜币
19
发表于 2022-7-6 12:59:33 | 显示全部楼层
你能把剧本贴出来吗?
回复

使用道具 举报

36

主题

183

帖子

151

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-6 13:02:12 | 显示全部楼层
  1. (defun repstring (ostring nstring)
  2. (setq ss (ssget "X" (list (cons 0 "INSERT,TEXT,MTEXT,RTEXT,DTEXT,DIMENSION"))))
  3.     (if ss
  4.         (progn
  5.              (repeat (sslength ss)
  6.              (setq ent (ssname ss 0))
  7.              (setq en (entget ent))
  8.              (setq etype (cdr (Assoc 0 en)))
  9.                   (if (= etype "INSERT")
  10.                      (PROGN
  11.                           (IF (ASSOC 66 EN)
  12.                                (PROGN
  13.                                (SETQ SUB1 (ENTNEXT ENT))
  14.                                     (WHILE (= (CDR (ASSOC 0 (ENTGET SUB1))) "ATTRIB")
  15.                                     (SETQ SUBEN (ENTGET SUB1))
  16.                                     (SETQ STG (CDR (aSSOC 1 SUBEN)))
  17.                                     (SETQ STG (vl-string-subst NSTRING OSTRING STG))
  18.                                     (ENTMOD (sUBST (cONS 1 STG) (aSSOC 1 SUBEN) SUBEN))
  19.                                     (SETQ SUB1 (eNTNEXT SUB1))
  20.                                     )
  21.                                (ENTUPD ENT)
  22.                                )
  23.                           )
  24.                      )
  25.                      (PROGN
  26.                      (SETQ STG (CDR (aSSOC 1 EN)))
  27.                      (SETQ STG (vl-string-subst NSTRING OSTRING STG))
  28.                      (ENTMOD (SUBST (CONS 1 STG) (ASSOC 1 EN) EN))
  29.                      )
  30.                   )
  31.                   
  32.              (ssdel ent ss)
  33.              )
  34.         )
  35.     )
  36. )
  37. (defun c:repstring ()
  38. (SETQ OSTRING (GETSTRING T "\nSTRING TO BE REPLACED: "))
  39. (SETQ NSTRING (GETSTRING T "\nSTRING TO REPLACE WITH: "))
  40. (REPSTRING OSTRING NSTRING)
  41. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 13:06:27 | 显示全部楼层
这是因为它使用vl string subst查找任何字符串中的出现项并替换它。
 
5X-123字符串是文本对象中唯一的文本吗?
回复

使用道具 举报

36

主题

183

帖子

151

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-6 13:10:07 | 显示全部楼层
5X-123位于单行文字或多行文字中,但它是文字对象中唯一的文字。
回复

使用道具 举报

36

主题

183

帖子

151

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-6 13:12:11 | 显示全部楼层
这里有一个例子。我只想更改5X-123字符串。
例子。图纸
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 13:16:52 | 显示全部楼层
试试这个:
 
  1. [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] rstring [b][color=RED]([/color][/b]old new [b][color=BLUE]/[/color][/b] ss sel[b][color=RED])[/color][/b]
  2. [b][color=RED]([/color][/b][b][color=BLUE]vl-load-com[/color][/b][b][color=RED])[/color][/b]
  3. [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] old [b][color=RED]([/color][/b][b][color=BLUE]strcase[/color][/b] old[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  4. [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] ss
  5.        [b][color=RED]([/color][/b][b][color=BLUE]ssget[/color][/b] [b][color=#ff00ff]"_X"[/color][/b]
  6.          [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b][b][color=RED]([/color][/b][b][color=#009900]-4[/color][/b] . [b][color=#ff00ff]"<OR"[/color][/b][b][color=RED])[/color][/b]
  7.              [b][color=RED]([/color][/b][b][color=#009900]0[/color][/b] . [b][color=#ff00ff]"*TEXT"[/color][/b][b][color=RED])[/color][/b]
  8.                [b][color=RED]([/color][/b][b][color=#009900]-4[/color][/b] . [b][color=#ff00ff]"<AND"[/color][/b][b][color=RED])[/color][/b]
  9.                  [b][color=RED]([/color][/b][b][color=#009900]0[/color][/b] . [b][color=#ff00ff]"INSERT"[/color][/b][b][color=RED])[/color][/b]
  10.                  [b][color=RED]([/color][/b][b][color=#009900]66[/color][/b] . [b][color=#009900]1[/color][/b][b][color=RED])[/color][/b]
  11.                [b][color=RED]([/color][/b][b][color=#009900]-4[/color][/b] . [b][color=#ff00ff]"AND>"[/color][/b][b][color=RED])[/color][/b]
  12.            [b][color=RED]([/color][/b][b][color=#009900]-4[/color][/b] . [b][color=#ff00ff]"OR>"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  13.    [b][color=RED]([/color][/b][b][color=BLUE]progn[/color][/b]
  14.      [b][color=RED]([/color][/b][b][color=BLUE]vlax-for[/color][/b] Obj [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] sel
  15.                      [b][color=RED]([/color][/b][b][color=BLUE]vla-get-ActiveSelectionSet[/color][/b]
  16.                        [b][color=RED]([/color][/b][b][color=BLUE]vla-get-ActiveDocument[/color][/b]
  17.                          [b][color=RED]([/color][/b][b][color=BLUE]vlax-get-acad-object[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  18.        [b][color=RED]([/color][/b][b][color=BLUE]cond[/color][/b] [b][color=RED]([/color][/b][b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=#ff00ff]"AcDbBlockReference"[/color][/b]
  19.                 [b][color=RED]([/color][/b][b][color=BLUE]vla-get-ObjectName[/color][/b] Obj[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  20.               [b][color=RED]([/color][/b][b][color=BLUE]foreach[/color][/b] att [b][color=RED]([/color][/b][b][color=BLUE]append[/color][/b]
  21.                              [b][color=RED]([/color][/b][b][color=BLUE]vlax-invoke[/color][/b] Obj [b][color=DARKRED]'[/color][/b]GetAttributes[b][color=RED])[/color][/b]
  22.                                [b][color=RED]([/color][/b][b][color=BLUE]vlax-invoke[/color][/b] Obj [b][color=DARKRED]'[/color][/b]GetConstantAttributes[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  23.                 [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] old [b][color=RED]([/color][/b][b][color=BLUE]strcase[/color][/b]
  24.                               [b][color=RED]([/color][/b][b][color=BLUE]vla-get-TextString[/color][/b] att[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  25.                   [b][color=RED]([/color][/b][b][color=BLUE]vla-put-TextString[/color][/b] att new[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  26.              [b][color=RED]([/color][/b][b][color=BLUE]t[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] old [b][color=RED]([/color][/b][b][color=BLUE]strcase[/color][/b]
  27.                               [b][color=RED]([/color][/b][b][color=BLUE]vla-get-TextString[/color][/b] Obj[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  28.                   [b][color=RED]([/color][/b][b][color=BLUE]vla-put-TextString[/color][/b] Obj new[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  29.      [b][color=RED]([/color][/b][b][color=BLUE]vla-delete[/color][/b] sel[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  30.    [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b] [b][color=#ff00ff]"\n** No Text or Attributed Blocks Found **"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  31. [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  32. [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] c:test [b][color=RED]([/color][/b] [b][color=RED])[/color][/b]
  33. [b][color=RED]([/color][/b]rstring [b][color=#ff00ff]"Lee"[/color][/b] [b][color=#ff00ff]"Mac"[/color][/b][b][color=RED])[/color][/b]
  34. [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
回复

使用道具 举报

36

主题

183

帖子

151

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-6 13:19:19 | 显示全部楼层
我加载这个lsp并尝试调用它,rstring,然后得到未知命令。有什么想法吗?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 13:21:06 | 显示全部楼层
rString是一个子函数,需要提供两个参数,即旧字符串和新字符串
 
您编写的代码格式相同。
回复

使用道具 举报

36

主题

183

帖子

151

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-6 13:25:10 | 显示全部楼层
我不明白。我必须选择什么吗?或者在rstring之前键入一些内容?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-5 03:09 , Processed in 0.421626 second(s), 72 queries .

© 2020-2025 乐筑天下

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