djeetn069 发表于 2022-7-5 22:57:13

查找并替换d中的文本

我试图找到一个lisp例程,该例程在当前图形中搜索某个字符串,并将其替换为用户已定义的变量字符串(在本例中,要查找的文本为“****”,变量称为“offerte”)。不仅在文本、多行文字中,而且在块、动态块、属性和字段中。。。
以下代码完成了任务,但仅适用于普通文本和多行文字。
 
(defun tekstreplace (/ tss tdata)
(setq tss (ssget "X" (list (cons 1 "****"))))
        (repeat (sslength tss)
                   (setq
                           tdata (entget (ssname tss 0))
                           tdata (subst (cons 1 offerte) (assoc 1 tdata) tdata)
                   )
                   (entmod tdata)
                   (ssdel (ssname tss 0) tss)
        )
)
 
如有任何意见,请提前联系Thanx!

lamensterms 发表于 2022-7-5 23:11:02

李有一个很棒的查找和替换工具。
 
http://www.lee-mac.com/bfind.html
 
它应该适合你的需要。

djeetn069 发表于 2022-7-5 23:23:19

好吧,我真的希望它是自动化的,这样用户就不用担心太多的对话框。
我确实已经在李的网站上进行了搜索,但没有针对这个具体问题的结果。
实际上我不确定这是否可行。因为我在网上搜索过,但没有找到任何解决方案。
这就是为什么我需要比我更有经验的lisp用户的帮助。
再次感谢您的帮助或建议!

fixo 发表于 2022-7-5 23:28:50

在我的代码库中找到了这一个旧的lisp,请在您的一端尝试,
更改旧文本值和新文本值,根据您的套装屏蔽名称

(vl-load-com)
(defun c:RTO(/ ablocks acapp adoc blkdef blklist blkobj en i newtext oldtext sset)
(setq acapp (vlax-get-acad-object)
      adoc (vla-get-activedocument acapp)
      ablocks (vla-get-blocks adoc))


(setq oldtext"ahha" newtext "new text");change to suit
(if (setq sset (ssget "_X" (list (cons 0"INSERT")(cons 661)(cons 2"`*U*,DynBlock"))));DynBlock is name for your interest
(progn
(setq i (sslength sset))
(while (setq en (ssname sset (setq i (1- i))))
(setq blkobj    (vlax-ename->vla-object en))
      (if (not (member "DynBlock" blklist)); use DynBlock only
(setq blklist (cons (vla-get-effectivename blkobj) blklist)))
(ssdel en sset))
(repeat (length blklist)
(if (not (vl-catch-all-error-p
(setq blkdef (vl-catch-all-apply 'vla-item (list ablocks (nth 0 blklist))))))
(progn
   (vlax-for a blkdef
   (if (eq "ACDBTEXT" (strcase (vla-get-objectname a)))
(if (eq oldtext (vla-get-textstring a))
(vla-put-textstring a newtext)))
(if (eq "ACDBMTEXT" (strcase (vla-get-objectname a)))
(if (eq oldtext (vla-get-textstring a))
(vla-put-textstring a newtext))))
   ))
(setq blklist (cdr blklist)))
(command "_attsync" "_N" "*")
(command "_regenall")
)
)
(princ)
)

djeetn069 发表于 2022-7-5 23:42:34

谢谢你的后期修复。我已经在代码中实现了它,但没有成功。
也许你可以指定我应该放置什么而不是Dynblock。我已经尝试了插入到图形中的几个块名,但仍然没有结果。
我还注意到,在常规多行文字中搜索的字符串也没有改变。我会做错什么吗?
非常感谢您的帮助!

BIGAL 发表于 2022-7-5 23:56:05

不确定,但发现了什么?do it certainaly changes attribute Value in Block。

djeetn069 发表于 2022-7-5 23:59:32

我再次尝试了所有可用的选项,但仍然无法使用上述代码??@比加尔:你的意思是你知道吗?
页: [1]
查看完整版本: 查找并替换d中的文本