[源码]批量文本替换
本帖最后由 cabinsummer 于 2016-12-24 15:11 编辑编译后的文件,免费,供淘宝者使用
命令:RC
(defun c:rc(/ oldch newch sstxt ssl ct0 edata etext txtln subln ct1 ct2 schct DCL_ID newtext)
(setvar "cmdecho" 0)
(command "undo" "be")
(setq oldch "" newch "")
(if (> (setq DCL_ID (load_dialog "replace.dcl")) 0)
(progn
(if (new_dialog "replace" DCL_ID)
(progn
(mode_tile "oldword" 2)
(action_tile "oldword" "(setq oldch $value)")
(action_tile "newword" "(setq newch $value)")
(start_dialog)
)
(princ "\n 不能显示对话框")
)
(unload_dialog DCL_ID)
)
(princ "\n 不能打开对话框")
)
(if (and (/= "" oldch)(/= oldch newch)(setq sstxt (ssget '((-4 . "<OR")(0 . "TEXT")(0 . "MTEXT")(-4 . "OR>")))))
(progn
(setq ssl (sslength sstxt)
ct0 0
ct1 0
ct2 0
subln (strlen oldch)
)
(while (< ct0 ssl)
(setq edata (entget (ssname sstxt ct0))
etext (cdr (assoc 1 edata))
txtln (strlen etext)
schct 1
newtext ""
)
(while (<= schct txtln)
(setq newtext
(strcat newtext
(if (= (setq readch (substr etext schct subln)) oldch)
(setq ct1 (1+ ct1)
schct (+ schct subln)
newch newch
)
(progn
(setq schct (1+ schct))
(substr readch 1 1)
)
)
)
)
)
(if (/= etext newtext)
(progn
(entmod (subst (cons 1 newtext) (assoc 1 edata) edata))
(setq ct2 (1+ ct2))
)
)
(setq ct0 (1+ ct0))
)
(alert (strcat "所选文字中共有" (itoa ct2) "个文字含" (itoa ct1) "个 \"" oldch "\" 被替换为 \"" newch "\" ."))
)
)
(command "undo" "e")
(princ)
)
replace:dialog
{
label="替换文字串中指定子串";
:edit_box
{
label="目标子串";
key="oldword";
allow_accept=true;
}
:edit_box
{
label="替换子串";
key="newword";
allow_accept=true;
}
ok_only;
}
半夜星星 发表于 2019-4-29 11:06
最好是用EXCEL的方式来改,把需要改的列成二列,这种有没有弄过
有的,直接在CAD选两列文字,一对对替换。 本帖最后由 ZJKUSO 于 2022-5-10 16:17 编辑
能替换“#”,判断比较严格,要区分大小写
有个小遗憾,图块属性的文字无法替换
能不能加一个按钮,全图替换 和 框选替换 分开来
最好是用EXCEL的方式来改,把需要改的列成二列,这种有没有弄过 感觉还是CAD原带的好用。。。。 429014673 发表于 2011-10-1 22:56 static/image/common/back.gif
感觉还是CAD原带的好用。。。。
说对了!其实这是我十几年前在R14下开发的,那时AutoCAD还没有查找替换的功能。我是在明经上看到不少人还在发类似的东西,其实我们很多功能都是重复开发。放眼望去,明经上的程序很多只有简单的功能,还像个宝一样编译。所以我贴出十几年前的源码供大家学习。 楼主的分享精神值得学习,支持 hzj526 发表于 2011-10-4 23:07 static/image/common/back.gif
楼主的分享精神值得学习,支持
感谢上帝、感谢AutoCAD、感谢明经,这么旧的程序现在还能用 感谢上帝。感谢风。 (ssget '((-4 . "<OR")(0 . "TEXT")(0 . "MTEXT")(-4 . "OR>")))))
好像能
(ssget '((0 . "*text"))) 感谢cabinsummer楼主
分享学习! 好帖啊 感谢楼主的同时,也建议大家理解一下新手吧.一个新手,花了大量的时间学会了编制一个简单的功能.对他来说,不亚于一个科学家搞出个原子弹来.让他沉浸在胜利的喜悦之中一段时间吧.