求帮忙替换旧命令~有一个列表包含了新命令和需要被替换的旧命令,怎么替换呢?
本帖最后由 iamhuangjinming 于 2020-6-12 17:10 编辑(defun c:refes ( )
(setq lst1 (list"A" "new1" "old1"))
(setq lst2 (list"B" "new2" "old2"))
(setq lst (conslst1 lst))
(setq lst (conslst2 lst))
(princ lst)
(setq n (length lst));
(setq index 0)
(repeat n
(setq lstn (nthindex lst)
index (1+ index)
)
(setq lstn(cdr lstn))
(setq new1(car lstn))
(setq old1(cadr lstn))
;(defun c:new1 nil (c: old1)(prin1))这里想把已经定义好的old1命令替换成new1,怎么能做到呢?
)
)
本帖最后由 tryhi 于 2020-6-12 15:04 编辑
发完贴能否检查一下,你看你发了几个表情也不改一下
(defun c:old1 ()(princ "\n1"))
(defun c:old2 ()(princ "\n2"))
(defun c:old3 ()(princ "\n3"))
(setq lst '(("new1" "old1")("new2" "old2")("new3" "old3")))
(foreach n lst
(eval(list 'defun (read(strcat "c:"(car n)))nil (list(read(strcat "c:"(cadr n))))))
)
tryhi 发表于 2020-6-12 14:51
发完贴能否检查一下,你看你发了几个表情也不改一下
感谢。那个表情惭愧了,我是个外行,做结构设计的,有几个命令同事要用别名所以这么搞。。。我试了一下我改的这个代码,提示参数类型错误,可以帮我看下怎么修正吗?感谢!
(defun c:de ()(princ "\n1"))
(defun c:ge ()(princ "\n2"))
(defun c:rev2 ()(princ "\n3"))
(defun c:rad ()(princ "\n3"))
(defun c:refes (/ fp str lst )
(setq fp (open "C:/Program Files/gatex/命令重命名.txt" "r")) ; 文件
(while (and (setq str (read-line fp)) (not (wcmatch str "Rename*"))))
(while (not (wcmatch str "$*"))
(setq lst (cons (read (strcat "(" (substr str 7) ")")) lst)
str (read-line fp)
)
(princ)
)
(princ)
(close fp)
(reverse lst)
(setq lstm nil)
(setq n (length lst))
(princ n)
(setq index 0)
(repeat n
(setq lstn (nthindex lst)
index (1+ index)
)
(setq lstn(cdr lstn))
(setq lstm (cons lstn lstm))
)
(foreach n lstm
(eval(list 'defun (read(strcat "c:"(car n)))nil (list(read(strcat "c:"(cadr n))))))
)
)
重命名文件里面的内容(参考“ Lisp如何读取txt中指定格式文件?”这个帖子写的):
$ 以Rename识别 依次输入新命令、原命令:
Rename 直线_ new1 de
Rename 多线_ new2 ge
Rename 云线_ new3 rev2
Rename 射线_ new4 rad
$ 到此结束
居然用read来处理字符串,有意思
(foreach n lstm
(eval(list 'defun (read(strcat "c:"(vl-prin1-to-string(car n))))nil (list(read(strcat "c:"(vl-prin1-to-string(cadr n)))))))
) tryhi 发表于 2020-6-12 18:08
居然用read来处理字符串,有意思
(foreach n lstm
感谢感谢,感谢大神! 本帖最后由 iamhuangjinming 于 2020-6-16 09:30 编辑
tryhi 发表于 2020-6-12 18:08
居然用read来处理字符串,有意思
(foreach n lstm
顺便再问一下您,我想取消被替换的命令,是不是可以用这条代码,(vl-acad-undefun 'c:xxx),但是我用这条(vl-acad-undefun 'c: (vl-prin1-to-string(cadr n)))没能成功,也是参数类型的问题吗? 本帖最后由 tryhi 于 2020-6-16 16:33 编辑
(vl-acad-undefun (read(strcat "c:" (vl-prin1-to-string(cadr n)))))试试,我没用过这个 tryhi 发表于 2020-6-16 16:30
(vl-acad-undefun (read(strcat "c:" (vl-prin1-to-string(cadr n)))))试试,我没用过这个
有效~~:victory:谢谢你!
页:
[1]