查找并替换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! 李有一个很棒的查找和替换工具。
http://www.lee-mac.com/bfind.html
它应该适合你的需要。 好吧,我真的希望它是自动化的,这样用户就不用担心太多的对话框。
我确实已经在李的网站上进行了搜索,但没有针对这个具体问题的结果。
实际上我不确定这是否可行。因为我在网上搜索过,但没有找到任何解决方案。
这就是为什么我需要比我更有经验的lisp用户的帮助。
再次感谢您的帮助或建议! 在我的代码库中找到了这一个旧的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)
)
谢谢你的后期修复。我已经在代码中实现了它,但没有成功。
也许你可以指定我应该放置什么而不是Dynblock。我已经尝试了插入到图形中的几个块名,但仍然没有结果。
我还注意到,在常规多行文字中搜索的字符串也没有改变。我会做错什么吗?
非常感谢您的帮助! 不确定,但发现了什么?do it certainaly changes attribute Value in Block。 我再次尝试了所有可用的选项,但仍然无法使用上述代码??@比加尔:你的意思是你知道吗?
页:
[1]