明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 607|回复: 7

[提问] 求帮忙替换旧命令~有一个列表包含了新命令和需要被替换的旧命令,怎么替换呢?

[复制链接]
发表于 2020-6-12 13:00:15 | 显示全部楼层 |阅读模式
本帖最后由 iamhuangjinming 于 2020-6-12 17:10 编辑

(defun c:refes ( )
  (setq lst1 (list  "A" "new1" "old1"))
  (setq lst2 (list  "B" "new2" "old2"))
  (setq lst (cons  lst1 lst))
  (setq lst (cons  lst2 lst))

(princ lst)
  (setq n (length lst));
  (setq index 0)
  (repeat n
    (setq lstn     (nth  index 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,怎么能做到呢?
)
)


发表于 2020-6-12 14:51:30 | 显示全部楼层
本帖最后由 tryhi 于 2020-6-12 15:04 编辑

发完贴能否检查一下,你看你发了几个表情也不改一下



  1. (defun c:old1 ()(princ "\n1"))
  2. (defun c:old2 ()(princ "\n2"))
  3. (defun c:old3 ()(princ "\n3"))

  4. (setq lst '(("new1" "old1")("new2" "old2")("new3" "old3")))
  5. (foreach n lst
  6.         (eval(list 'defun (read(strcat "c:"(car n)))nil (list(read(strcat "c:"(cadr n))))))
  7. )


 楼主| 发表于 2020-6-12 16:48:36 | 显示全部楼层
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     (nth  index 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
$ 到此结束

发表于 2020-6-12 18:08:46 | 显示全部楼层
居然用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)))))))
)
 楼主| 发表于 2020-6-12 21:26:10 | 显示全部楼层
tryhi 发表于 2020-6-12 18:08
居然用read来处理字符串,有意思

(foreach n lstm

感谢感谢,感谢大神!
 楼主| 发表于 2020-6-16 09:28:44 | 显示全部楼层
本帖最后由 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)))没能成功,也是参数类型的问题吗?
发表于 2020-6-16 16:30:09 | 显示全部楼层
本帖最后由 tryhi 于 2020-6-16 16:33 编辑

(vl-acad-undefun (read(strcat "c:" (vl-prin1-to-string(cadr n)))))试试,我没用过这个
 楼主| 发表于 2020-6-16 17:40:21 | 显示全部楼层
tryhi 发表于 2020-6-16 16:30
(vl-acad-undefun (read(strcat "c:" (vl-prin1-to-string(cadr n)))))试试,我没用过这个

有效~~谢谢你!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-17 23:39 , Processed in 0.154119 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表