guwenjiang 发表于 2016-6-5 16:10:08

这个批量替换源码如何改为全字匹配模式呢?

这个网上一个大神做的批量替换程序,程序见附件,但这个程序有个问题就是替换数字时容易出错,比如我创建了一个替换表1,2   11,3   我替换11的时候就会替换成22,而不是3,所以请大神们帮我更改一下这个源码,使之能够全字匹配替换。

tryhi 发表于 2016-6-6 20:32:30

你把11,3放到1,2前面就没有这个问题

sunny_8848 发表于 2019-9-16 12:47:31

终于找到合适的了,多谢分享

烟盒迷唇 发表于 2021-9-18 09:00:42

这是熊掌的程序啊

muwind 发表于 2022-5-6 00:30:15

全字匹配,也就是你的文字只有这个几个字符才能实现。其次实现就是判断的时候不用查找直接用等于判断就可以了。原来的程序估计写时间应该比较早,判断过程挺复杂的。全字匹配的话可以直接 :
      (if (= oldchetext)(setq newtext newch)   )

panliang9 发表于 2022-5-6 09:05:15

muwind 发表于 2022-5-6 00:30
全字匹配,也就是你的文字只有这个几个字符才能实现。其次实现就是判断的时候不用查找直接用等于判断就可以 ...

“muwind”你好,
能不能麻烦你出手改一下,确实无法全字匹配。

muwind 发表于 2022-5-6 22:14:48

本帖最后由 muwind 于 2022-5-6 22:22 编辑

全字匹配真的很简单,
如果你所有的替换都要全字匹配 可以把repall改名为KX-reptext替换原来的函数
如果你要保留部分替换,可以在原来的代码基础上增加一个选项,
设置为全字匹配的时候调用repall进行替换,不需要全字匹配的时候用原来的KX-reptext
选择集判断我习惯在主程序里面判断 是否为nil,在子函数里面我觉得还是干净点比较好
(defun repall (SS oldch newch / ssct0 edata etext )
      (setq ssl (sslength ss)    ct0 0      )
      (while (< ct0 ssl)
      (setq edata (entget (ssname ss ct0))       etext (cdr (assoc 1 edata)))
      (if (= oldch etext)(entmod (subst (cons 1 newch) (assoc 1 edata) edata)))
      (setq ct0 (1+ ct0))
      )
)

(DEFUN C:tt()
    (setvar "cmdecho" 0)
   (if   (setq ss(SSGET":s" '((0 . "*TEXT"))) )
      (progn
      (repall SS "全字" "全字匹配")
      (repall SS "匹配全字" "全字匹配")
      )
   (princ "您没有选择任何文字,我喝西北风去了")
    )
    (PRINC)
)

balke 发表于 2022-8-1 17:20:19

感谢大佬分享

lengxiaxi 发表于 2023-7-12 14:33:23

输入QQ,读取直接nil,路径按照默认设置,读取不到

lengxiaxi 发表于 2023-7-14 18:29:41

muwind 发表于 2022-5-6 22:14
全字匹配真的很简单,
如果你所有的替换都要全字匹配 可以把repall改名为KX-reptext替换原来的函数
如果 ...

明明有对应文字,却显示没有选择任何文字;
页: [1]
查看完整版本: 这个批量替换源码如何改为全字匹配模式呢?