提取文件名并替换指定文本,求修改
想实现提取文档名后,部份替换到指定的文本
比方说,打开的文档名为,abc#123
提取文档名后,只把123替换到指定的文本
无奈水平有限,望大佬们帮改改
(defun c:tt ( / e22 e2 sn1 sn2i)
(setq e22 nil)
(while (or (= e22 nil) (/= (cdr (assoc '0 (entget (car e22)))) "TEXT"))
(setq e22 (entsel "选择要更改的文本"))
)
(setq e2 (entget (car e22)))
(setq sn1 (cdr (assoc '1e2)))
(setq i 1)
(repeat (strlen sn1)
(cond
((= (substr sn1 i 1) "") (setq sn2 (vl-filename-base(getvar"dwgname"))))
)
(entmod (setq e2 (subst (cons 1 sn2) (assoc 1 e2) e2))))
(PRINC)
)
本帖最后由 gaics 于 2019-11-22 15:25 编辑
没看懂是要干什么,是把后三个字符替换?替换的原则又是什么? (setq i 1)
(repeat (strlen sn1)
(cond
((= (substr sn1 i 1) "") (setq sn2 (vl-filename-base(getvar"dwgname"))))
)
这一段不懂什么意思
(repeat (strlen sn1)就是循环文字长度次,后面的(= (substr sn1 i 1) "")其实也是循环到最后才能为t吧?
而且循环这么多次后面的sn2其实每次取值不是一样的么?那干嘛还要费这个功夫?
另外你也没实现对文件名取部分啊?
分割文件名可以用正则表达式实现,论坛里有现成的函数. wyl219 发表于 2019-11-22 11:50
(setq i 1)
(repeat (strlen sn1)
(cond
谢谢提指点,以经弄好了
页:
[1]