全局文本替换(REPSTRING
我在脚本中使用REPSTRING LISP来替换整个文件夹中充满图形的文本。我遇到了一个文本替换问题。我想运行一个文本替换,它将找到:5X-123并将其更改为:5X-999。问题是,在一些图纸中存在:15X123、25X-123和35X-123。除了5X-123字符串之外,我不想更改任何内容。有人知道如何在不影响15X-123、25X-123或35X-123字符串的情况下更改5X-123文本字符串吗? 你能把剧本贴出来吗? (defun repstring (ostring nstring)(setq ss (ssget "X" (list (cons 0 "INSERT,TEXT,MTEXT,RTEXT,DTEXT,DIMENSION"))))
(if ss
(progn
(repeat (sslength ss)
(setq ent (ssname ss 0))
(setq en (entget ent))
(setq etype (cdr (Assoc 0 en)))
(if (= etype "INSERT")
(PROGN
(IF (ASSOC 66 EN)
(PROGN
(SETQ SUB1 (ENTNEXT ENT))
(WHILE (= (CDR (ASSOC 0 (ENTGET SUB1))) "ATTRIB")
(SETQ SUBEN (ENTGET SUB1))
(SETQ STG (CDR (aSSOC 1 SUBEN)))
(SETQ STG (vl-string-subst NSTRING OSTRING STG))
(ENTMOD (sUBST (cONS 1 STG) (aSSOC 1 SUBEN) SUBEN))
(SETQ SUB1 (eNTNEXT SUB1))
)
(ENTUPD ENT)
)
)
)
(PROGN
(SETQ STG (CDR (aSSOC 1 EN)))
(SETQ STG (vl-string-subst NSTRING OSTRING STG))
(ENTMOD (SUBST (CONS 1 STG) (ASSOC 1 EN) EN))
)
)
(ssdel ent ss)
)
)
)
)
(defun c:repstring ()
(SETQ OSTRING (GETSTRING T "\nSTRING TO BE REPLACED: "))
(SETQ NSTRING (GETSTRING T "\nSTRING TO REPLACE WITH: "))
(REPSTRING OSTRING NSTRING)
) 这是因为它使用vl string subst查找任何字符串中的出现项并替换它。
5X-123字符串是文本对象中唯一的文本吗? 5X-123位于单行文字或多行文字中,但它是文字对象中唯一的文字。 这里有一个例子。我只想更改5X-123字符串。
例子。图纸 试试这个:
(defun rstring (old new / ss sel)
(vl-load-com)
(setq old (strcase old))
(if (setq ss
(ssget "_X"
'((-4 . "<OR")
(0 . "*TEXT")
(-4 . "<AND")
(0 . "INSERT")
(66 . 1)
(-4 . "AND>")
(-4 . "OR>"))))
(progn
(vlax-for Obj (setq sel
(vla-get-ActiveSelectionSet
(vla-get-ActiveDocument
(vlax-get-acad-object))))
(cond ((eq "AcDbBlockReference"
(vla-get-ObjectName Obj))
(foreach att (append
(vlax-invoke Obj 'GetAttributes)
(vlax-invoke Obj 'GetConstantAttributes))
(if (eq old (strcase
(vla-get-TextString att)))
(vla-put-TextString att new))))
(t (if (eq old (strcase
(vla-get-TextString Obj)))
(vla-put-TextString Obj new)))))
(vla-delete sel))
(princ "\n** No Text or Attributed Blocks Found **"))
(princ))
(defun c:test ( )
(rstring "Lee" "Mac")
(princ))
我加载这个lsp并尝试调用它,rstring,然后得到未知命令。有什么想法吗? rString是一个子函数,需要提供两个参数,即旧字符串和新字符串
您编写的代码格式相同。 我不明白。我必须选择什么吗?或者在rstring之前键入一些内容?
页:
[1]
2