cabinsummer 发表于 2011-10-1 20:57:07

[源码]批量文本替换

本帖最后由 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;
}

chshsl 发表于 2024-1-25 15:30:39

半夜星星 发表于 2019-4-29 11:06
最好是用EXCEL的方式来改,把需要改的列成二列,这种有没有弄过

有的,直接在CAD选两列文字,一对对替换。

ZJKUSO 发表于 2022-5-10 15:08:10

本帖最后由 ZJKUSO 于 2022-5-10 16:17 编辑

能替换“#”,判断比较严格,要区分大小写
有个小遗憾,图块属性的文字无法替换
能不能加一个按钮,全图替换 和 框选替换 分开来

半夜星星 发表于 2019-4-29 11:06:04

最好是用EXCEL的方式来改,把需要改的列成二列,这种有没有弄过

429014673 发表于 2011-10-1 22:56:33

感觉还是CAD原带的好用。。。。

cabinsummer 发表于 2011-10-2 04:07:03

429014673 发表于 2011-10-1 22:56 static/image/common/back.gif
感觉还是CAD原带的好用。。。。

说对了!其实这是我十几年前在R14下开发的,那时AutoCAD还没有查找替换的功能。我是在明经上看到不少人还在发类似的东西,其实我们很多功能都是重复开发。放眼望去,明经上的程序很多只有简单的功能,还像个宝一样编译。所以我贴出十几年前的源码供大家学习。

hzj526 发表于 2011-10-4 23:07:52

楼主的分享精神值得学习,支持

cabinsummer 发表于 2011-10-5 10:49:56

hzj526 发表于 2011-10-4 23:07 static/image/common/back.gif
楼主的分享精神值得学习,支持

感谢上帝、感谢AutoCAD、感谢明经,这么旧的程序现在还能用

yanshengjiang 发表于 2011-10-5 14:49:11

感谢上帝。感谢风。

yanshengjiang 发表于 2011-10-5 14:51:49

(ssget '((-4 . "<OR")(0 . "TEXT")(0 . "MTEXT")(-4 . "OR>")))))

好像能
(ssget '((0 . "*text")))

yoyoho 发表于 2011-10-5 16:52:34

感谢cabinsummer楼主
分享学习!

jicqj 发表于 2011-10-29 08:59:31

好帖啊

VBALISPER 发表于 2011-10-29 11:34:30

感谢楼主的同时,也建议大家理解一下新手吧.一个新手,花了大量的时间学会了编制一个简单的功能.对他来说,不亚于一个科学家搞出个原子弹来.让他沉浸在胜利的喜悦之中一段时间吧.
页: [1] 2 3 4 5 6
查看完整版本: [源码]批量文本替换