查找并替换不带
我正在寻找一种自动查找和替换的方法。我有大量带有特定文字符号“D.F.”的图纸需要更改为“DF”。我想通过在工具栏上创建一个lisp和一个图标来为我的用户实现自动化。我试着在工具栏图标上的宏中写入它,但我不知道如何通过对话框。
谁能给我指出正确的方向,或者用Lisp程序的Lisp程序就能做到?
提前感谢 你看过这个论坛中类似的帖子吗,如本页底部所示?这个话题已经提过几次了。 是的,这就是我决定发布这个问题的原因。我在找更具体的东西。
谢谢 试试这个,但是很快又脏
(defun C:RT (/ acapp acsp adoc adocs fn fold full_name_list)
(or (vl-load-com))
(setq fn (getfiled "Select *ANY .DWG FILE* in a desired folder : "
""
"dwg"
4
)
fold (vl-filename-directory fn)
full_name_list (vl-directory-files fold "*.dwg" 1)
full_name_list (mapcar (function (lambda (x)
(strcat fold "\\" x)
)
)
full_name_list
)
)
(setq acapp (vlax-get-acad-object)
adocs (vla-get-documents acapp)
)
(foreach fl full_name_list
(setq adoc (vla-open adocs fl :vlax-false))
(setq acsp (vla-get-modelspace adoc))
(vlax-for lt (vla-get-layouts adoc)
(vlax-for obj (vla-get-block lt)
(if (eq "AcDbText" (vla-get-objectname obj))
(if (eq "D.F." (vla-get-textstring obj))
(vla-put-textstring obj "DF")
)
)
)
)
(vla-save adoc)
(vla-close adoc)
)
)
(princ "\n\t***\tStart command with RT\t***")
(princ)
~'J'~ 非常感谢你。我把它都设置好了,但它并没有切换文本。“D.F.”与其他文本在一个字符串中。这个lisp是否只能查找一个只有“D.F.”的文本字符串? 这就是为什么。
替换此:
(if (eq "D.F." (vla-get-textstring obj))
(vla-put-textstring obj "DF")
)
有了这个:
(if (wcmatch (vla-get-textstring obj) "*D.F.*")
(vla-put-textstring obj
(vl-string-subst "DF" "D.F."(vla-get-textstring obj)))
) 驾驶室
非常感谢你的帮助。
一次只能为一个图形编写此代码吗。
似乎这个代码要求我选择一个。dwg文件,但它贯穿了所有。特定文件夹中的dwg。
再次感谢。 当然,试试这个:
;;Code by Fatty Mod by CAB
(defun C:RT (/ acapp acsp adoc adocs fn)
(vl-load-com)
(if (setq fn (getfiled "Select .DWG FILE to replace text : " "" "dwg" 4))
(progn
(setq acapp (vlax-get-acad-object)
adocs (vla-get-documents acapp)
)
(setq adoc (vla-open adocs fn :vlax-false))
(setq acsp (vla-get-modelspace adoc))
(vlax-for lt (vla-get-layouts adoc)
(vlax-for obj (vla-get-block lt)
(if (eq "AcDbText" (vla-get-objectname obj))
(if (wcmatch (vla-get-textstring obj) "*D.F.*")
(vla-put-textstring obj
(vl-string-subst "DF" "D.F." (vla-get-textstring obj))
)
)
)
)
)
(vla-save adoc)
(vla-close adoc)
)
)
(princ)
) 驾驶室
谢谢,我明天试试。这段代码看起来不适用于。我当前将使用的dwg。看起来用户仍然需要手动选择一个。图纸。我正在寻找它来改变我所在的图纸中的文字。
如果我听起来像个讨厌鬼,我很抱歉。我真的很感谢以上所有信息。
再次感谢 这是经过编辑的版本,抱歉耽搁了
(defun C:RT (/ acapp acsp adoc adocs fn fold full_name_list st)
;; local defun
;; by Michael Puckett
(defun Replace ( oldText newText text / i )
(if (/= oldText newText)
(while (setq i (vl-string-search oldText text))
(setq text
(vl-string-subst
newText
oldText
text
i
)
)
)
)
text
)
(or (vl-load-com))
(setq fn (getfiled "Select *ANY .DWG FILE* in a desired folder : "
""
"dwg"
4
)
fold (vl-filename-directory fn)
full_name_list (vl-directory-files fold "*.dwg" 1)
full_name_list (mapcar (function (lambda (x)
(strcat fold "\\" x)
)
)
full_name_list
)
)
(setq acapp (vlax-get-acad-object)
adocs (vla-get-documents acapp)
)
(foreach fl full_name_list
(setq adoc (vla-open adocs fl :vlax-false))
(setq acsp (vla-get-modelSpace adoc))
(vlax-for lt (vla-get-layouts adoc)
(vlax-for obj (vla-get-block lt)
(if (eq "AcDbText" (vla-get-objectname obj))
(if (wcmatch (setq st (vla-get-textstring obj)) "*D.F.*")
(vla-put-textstring obj (Replace "DF" "D.F." st))
)
)
)
)
(vla-save adoc)
(vla-close adoc)
)
)
(princ "\n\t***\tStart command with RT\t***")
(princ)
页:
[1]
2