乐筑天下

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

[编程交流] 顺序查找/替换?

[复制链接]

6

主题

44

帖子

39

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-6 17:27:46 | 显示全部楼层 |阅读模式
我试图找出如何执行查找/替换类型例程,该例程将增加末尾的数字。为了解释,我必须编辑一些图纸,以反映基于现场布线的电路上的设备位置,因为它与原始图纸不同。这通常意味着我必须手动编辑每个条目,但是编辑过程中大部分标注保持不变,只有最后的数字发生变化,并且这些数字始终以数字顺序排列。典型的调用可能类似于ES-4-SP-105,下一个设备是ES-4-SP-106,以此类推。我可以使用传统的查找/替换来更改标注的第一部分,但是我希望能够简单地单击一个对象,并让它自动用下一个增量替换最后的数字,因此,我不必双击对象,只需单击它并移动到下一个设备。
我对AutoLISP的了解很少。我最初希望find/replace命令有一个命令行版本,这样我就可以构建一个增量并重复调用该命令,每次都添加增量;但是,我无法找到以这种方式使用查找/替换功能的方法。对我来说,使用直接代码的主要挑战是处理多个对象,如块、多行文字和文本。如有任何建议、指示或代码,将不胜感激。
 
提前感谢
回复

使用道具 举报

4

主题

940

帖子

961

银币

初来乍到

Rank: 1

铜币
12
发表于 2022-7-6 17:49:35 | 显示全部楼层
试试这里的沼泽;你必须注册,但它是免费的。
回复

使用道具 举报

6

主题

44

帖子

39

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-6 17:54:55 | 显示全部楼层
谢谢你的链接,但是VB中的实现我一点都不知道,所以我不能修改代码来实现我想要的增量。更重要的是,这似乎是一个标准的查找/替换,我需要修改它,以便可以按顺序选择对象。
 
基本上,我需要一个能做以下事情的程序:
 
1) 获取要在查找/关系中搜索的字符串
2) 获取开始计数的第一个增量
3) 请求用户输入要编辑的对象,然后进行文本交换
4) 递增后继续请求用户输入
5) 当用户说“停止”时停止
 
例如,我启动命令,然后键入3-EN-6-SP-??哪里是通配符。然后我会键入51以指示我单击的第一个对象应该标记为3-EN-6-SP-51。然后我单击一个块/文本/多行文字对象,它会查找/替换该对象上的文本。然后我单击另一个block/text/Mtext对象,它会在该对象中找到/与字符串3-EN-6-SP-52相关。然后我会一直单击,直到完成序列并按enter键完成命令。
回复

使用道具 举报

11

主题

117

帖子

133

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
52
发表于 2022-7-6 18:15:03 | 显示全部楼层
我找到了这个旧的Lisp程序,可能会得到你想要的。
  1. ;;;Routine for Renumbering<p>;;;Realization {Smirnoff}</p><p>;;;http://www.autocad.ru/cgi-bin/f1/board.cgi?t=29829Am</p><p>;;;http://www.autocad.ru/cgi-bin/f1/board.cgi?t=21807yD</p><p>;;;Edition 23.10.2006 Vladimir Azarko (VVA)</p><p>;;;http://www.autocad.ru/cgi-bin/f1/board.cgi?t=30394Ae</p><p>(defun c:renum (/ oldPref oldSuf oldStart curText curStr vlaObj keepText)</p><p>(vl-load-com)</p><p>(defun TTC_Paste(pasteStr keepText / nslLst vlaObj)</p><p>(if (setq nslLst(nentsel "\nPaste text <exit> >>"))</exit></p><p>(progn (cond</p><p>((and (= 4(length nslLst))</p><p> (= "DIMENSION"(cdr(assoc 0(entget(car(last nslLst))))))); end and</p><p>(setq vlaObj (vlax-ename->vla-object (cdr(assoc -1(entget(car(last nslLst)))))))</p><p>(setq oldStat (vla-get-Measurement vlaObj))</p><p>(if keepText</p><p> (if (= (vla-get-TextOverride vlaObj) "")</p><p> (setq pasteStr (strcat pasteStr (rtos oldStat (vla-get-UnitsFormat vlaObj) (vla-get-PrimaryUnitsPrecision vlaObj))))</p><p> (setq pasteStr (strcat pasteStr (vla-get-TextOverride vlaObj)))))</p><p>(if (vl-catch-all-error-p(vl-catch-all-apply 'vla-put-TextOverride(list vlaObj pasteStr)))</p><p> (princ "\n Can't paste. Object may be on locked layer. "))); end condition #1</p><p>((and (= 4(length nslLst))</p><p>(= "ACAD_TABLE"(cdr(assoc 0(entget(car(last nslLst))))))); end and</p><p>(setq vlaObj (vlax-ename->vla-object(car nslLst)))</p><p>(if keepText (setq pasteStr (strcat pasteStr (vla-get-TextString vlaobj))))</p><p>(if (vl-catch-all-error-p (vl-catch-all-apply 'vla-put-TextString(list vlaObj pasteStr)))</p><p>(princ "\nError. Can't pase text. ")(entupd (car(last nslLst))))); end condition # 2</p><p>((and (= 4(length nslLst))</p><p> (= "INSERT"(cdr(assoc 0(entget(car(last nslLst))))))); end and</p><p>(princ "\nCan't paste to block's DText or MText. ")); end condition #3</p><p>((and (= 2(length nslLst))</p><p>(member(cdr(assoc 0(entget(car nslLst)))) '("TEXT" "MTEXT" "ATTRIB" "ATTDEF"))); end and</p><p>(setq vlaObj (vlax-ename->vla-object(car nslLst)))</p><p>(if keepText (setq pasteStr (strcat pasteStr (vla-get-TextString vlaobj))))</p><p>(if (vl-catch-all-error-p (vl-catch-all-apply 'vla-put-TextString(list vlaObj pasteStr)))</p><p>(princ "\nError. Can't pase text. "))); end condition #4</p><p>(T (princ "\nCan't paste. Invalid object. ")); end condition #5</p><p>); end cond</p><p>T); end progn</p><p>nil); end if</p><p>);_TTC_PASTE</p><p>(setq aDoc(vla-get-ActiveDocument(vlax-get-acad-object)))</p><p>(vla-StartUndoMark aDoc)</p><p>(if(not rnm:Pref)(setq rnm:Pref ""))(if(not rnm:Suf)(setq rnm:Suf ""))</p><p>(if(not rnm:Start)(setq rnm:Start 1))</p><p>(setq oldPref rnm:Pref oldSuf rnm:Suf oldStart rnm:Start); end setq</p><p>(setq rnm:Pref (getstring T (strcat "\nType prefix: : ")))</p><p>(if(= "" rnm:Pref)(setq rnm:Pref oldPref))(if(= " " rnm:Pref)(setq rnm:Pref ""))</p><p>(setq rnm:Suf (getstring T (strcat "\nType suffix: : ")))</p><p>(if(= "" rnm:Suf)(setq rnm:Suf oldSuf));(if(= " " rnm:Suf)(setq rnm:Suf ""))</p><p>(setq rnm:Start (getint (strcat "\nEnter start number </p><p>(itoa rnm:Start)">: ")))</p><p>(if(null rnm:Start)(setq rnm:Start oldStart))</p><p>(initget "Yes No Ä</p>
回复

使用道具 举报

6

主题

44

帖子

39

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-6 18:27:12 | 显示全部楼层
我没有太多时间玩肾素。lsp,但我初步尝试使用它没有成功。我编写了以下代码,它完成了我需要为text对象执行的操作。
 
然而,代码有一些问题。首先,没有错误处理。在运行其余代码之前,代码可能应该进行测试,以查看所选对象是否为文本对象。第二,(命令“change”)的使用是一种解决方法,因为我不知道如何直接编辑对象属性——有人有这方面的资源吗?我对我编写它的方式的主要抱怨是代码中的“”集合缺乏透明度。
 
不用多说,下面是代码。该功能被称为“cx”,因为它们靠近键盘,不用于任何其他用途。
 
  1. (defun c:cx() ;;Edits text objects by replacing current text with a prefix and an incremental numerical suffix
  2. (setq prefix (getstring "Prefix:")) ;; prompts the user for the string prefix
  3. (setq startint (getint "Initial number:")) ;; prompts the user for the initial number
  4. (setq cnt 0) ;; intializes the counter
  5. (while
  6.    (PROGN
  7.      (setq ent (entsel)) ;;requests the first text to edit
  8.      (setq newstring (strcat prefix (itoa (+ startint cnt)))) ;;created the string
  9.      (command "change" (car ent) "" "" "" "" "" "" newstring) ;;replace the string
  10.      (setq cnt (1+ cnt)) ;; increment the counter
  11.     )
  12.   )
  13. )

 
感谢您对改进此代码的任何意见。最终,我希望能够用这个例程编辑块属性和多行文字,但它现在适用于我当前的图形。
回复

使用道具 举报

11

主题

117

帖子

133

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
52
发表于 2022-7-6 18:30:03 | 显示全部楼层
对不起,我之前发布的代码有问题,因为我把它从一个更大的lisp例程中去掉了。这是ASMI的独立版本。
  1. ;; ============================================================ ;;
  2. ;;                                                              ;;
  3. ;;  RENUM.LSP - This program converts TEXT, MTEXT and  ;;
  4. ;;              ATTRIBUTES in numbers with a prefix and  ;;
  5. ;;              a suffix.     ;;
  6. ;;                                                           ;;
  7. ;; ============================================================ ;;
  8. ;;                                                             ;;
  9. ;;  Command(s) to call: RENUM                                   ;;
  10. ;;                                                             ;;
  11. ;;  Specify a suffix, a prefix and starting number (for erase  ;;
  12. ;;  the old suffix or prefix you should press Spacebar). Pick  ;;
  13. ;;  to TEXT, MTEXT, ATTRIBUTES or press Esc to quit. The  ;;
  14. ;;  program remembers old properties and it is possible to  ;;
  15. ;;  confirm it pressing of Spacebar key.   ;;
  16. ;;                                                              ;;
  17. ;; ============================================================ ;;
  18. ;;                                                              ;;
  19. ;;  THIS PROGRAM AND PARTS OF IT MAY REPRODUCED BY ANY METHOD ;;
  20. ;;  ON ANY MEDIUM FOR ANY REASON. YOU CAN USE OR MODIFY THIS ;;
  21. ;;  PROGRAM OR PARTS OF IT ABSOLUTELY FREE.                  ;;
  22. ;;                                                              ;;
  23. ;;  THIS PROGRAM PROVIDES THIS PROGRAM 'AS IS' WITH ALL FAULTS ;;
  24. ;;  AND SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF  ;;
  25. ;;  MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE.            ;;
  26. ;;                                                             ;;
  27. ;; ============================================================ ;;
  28. ;;                                                              ;;
  29. ;;  V1.3, 12 May, 2005, Riga, Latvia                            ;;
  30. ;;  © Aleksandr Smirnov (ASMI)                           ;;
  31. ;;  For AutoCAD 2000 - 2008 (isn't tested in a next versions) ;;
  32. ;;                                                              ;;
  33. ;;                             [url]http://www.asmitools.com[/url]    ;;
  34. ;;                                                             ;;
  35. ;; ============================================================ ;;
  36. (defun c:renum (/ oldPref oldSuf oldStart curText curStr)
  37. (vl-load-com)
  38. (if(not rnm:Pref)(setq rnm:Pref ""))
  39. (if(not rnm:Suf)(setq rnm:Suf ""))
  40. (if(not rnm:Start)(setq rnm:Start 1))
  41. (setq oldPref rnm:Pref
  42.        oldSuf rnm:Suf
  43.        oldStart rnm:Start); end setq
  44. (setq rnm:Pref
  45.    (getstring T
  46.      (strcat "\nPrefix: <"rnm:Pref">: ")))
  47. (if(= "" rnm:Pref)(setq rnm:Pref oldPref))
  48. (if(= " " rnm:Pref)(setq rnm:Pref ""))
  49. (setq rnm:Suf
  50.    (getstring T
  51.      (strcat "\nSuffix: <"rnm:Suf">: ")))
  52. (if(= "" rnm:Suf)(setq rnm:Suf oldSuf))
  53. (if(= " " rnm:Suf)(setq rnm:Suf ""))
  54. (setq rnm:Start
  55.    (getint
  56.      (strcat "\nStarting number <"
  57.         (itoa rnm:Start)">: ")))
  58. (if(null rnm:Start)(setq rnm:Start oldStart))
  59.     (while T
  60.       (setq curStr(strcat rnm:Pref(itoa rnm:Start)rnm:Suf))
  61.         (setq curText
  62.           (car
  63.             (nentsel
  64.   "\n<<< Pick TEXT, MTEXT or ATTRIBUTE or press Esc to quit >>> ")))
  65.       (if
  66.         (and
  67.           curText
  68.           (member(cdr(assoc 0(entget curText)))
  69.         '("TEXT" "MTEXT" "ATTRIB"))
  70.           ); end and
  71.         (progn
  72.    (if
  73.      (vl-catch-all-error-p
  74.        (vl-catch-all-apply 'vla-put-TextString
  75.   (list(vlax-ename->vla-object curText)curStr)))
  76.       (princ "\n<!> Entity on locked layer <!>")
  77.              (setq rnm:Start(1+ rnm:Start))
  78.      ); end if
  79.         ); end progn
  80.        (princ "\n<!> This is not DText or MText <!>")
  81.        ); end if
  82.       ); end while
  83.   (princ)
  84. ); end of c:renum
  85. (princ
  86. (strcat "\n*** Text, MText or Attributes"
  87.          " numbering tool. Type RENUM to run.*** "))
  88.    
  89.          

查看ASMI的网站。http://www.asmitools.com
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 16:15 , Processed in 0.493676 second(s), 76 queries .

© 2020-2025 乐筑天下

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