找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3250|回复: 34

[投票]:一次实现多个查找替换

[复制链接]
发表于 2005-6-18 19:43:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我想一次实现多个查找替换,

不知程序怎么写啊,
一个一个的查找替换很费时的!

%%1318@180替代为K8:
%%1318@150替代为K5;
%%1318@200替代为K
........

请各位大吓和班主写个吧
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-6-18 20:42:13 | 显示全部楼层
command : find
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-6-18 23:55:58 | 显示全部楼层
  1. [FONT=courier new](load "xyp_lib")
  2. ;|加载通用函数(可在签名栏直接下载)
  3. 如果已经下载xyp_lib并放到搜索路径下可以不再下载!
  4. 利用以下任何一种方式即可加载和运行通用函数内的所有子程序:
  5. 1.在acad.lsp中增加(load"xyp_lib")
  6. 2.在每个程序内增加(load"xyp_lib")
  7. 3.在command下,输入(load"xyp_lib")
  8. 4.在菜单.mnl中增加(load"xyp_lib")
  9. 5.将xyp_lib.vlx文件直接拽到cad屏幕
  10. [COLOR=red] ★通用函数下载地址:[/COLOR][url]http://www.xdcad.net/forum/attachment.php?s=&postid=1606661[/url]|;

  11. ;;;一次实现多个查找替换<gongzhuke>
  12. (defun c:test ()
  13.   (CMDLA0)
  14.   (setq        ss (ssget '((0 . "TEXT")))
  15.         i  -1
  16.   )
  17.   (while (setq s1 (ssname ss (setq i (1+ i))))
  18.     (setq #txt (dxf 1 (entget s1)))
  19.     (cond-user)
  20.   )
  21.   (CMDLA1)
  22. )
  23. (defun cond-user ()
  24.   (cond
  25.     ((= #txt "%%1318@180") (sub_upd s1 1 "K8"))
  26.     ((= #txt "%%1318@150") (sub_upd s1 1 "K5"))
  27.     ((= #txt "%%1318@200") (sub_upd s1 1 "K"))
  28.     ;;……用户自定义
  29.     (t (princ))
  30.   )
  31. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-6-19 08:15:59 | 显示全部楼层

  1. (defun string_unparse (lst delimiter / return)
  2.   (setq return "")
  3.   (foreach str lst
  4.     (setq return (strcat return delimiter str))
  5.   )
  6.   (substr return 2)
  7. )
  8. ;; strlst ((oldtext1 . newtext1) (oldtext2 . newtext2) ...)
  9. (defun mreplace        (strlst / oldtext newtext ss ssl el n)
  10.   (setq        oldtext        (mapcar 'car strlst)
  11.         newtext        (mapcar 'cdr strlst)
  12.   )
  13.   (if (setq ss (ssget "x" (list (cons 1 (string_unparse oldtext ",")))))
  14.     (progn
  15.       (setq ssl (sslength ss))
  16.       (while (> ssl 0)
  17.         (setq e         (ssname ss (setq ssl (1- ssl)))
  18.               el (entget e)
  19.               n         (vl-position (cdr (setq str (assoc 1 el))) oldtext)
  20.         )
  21.         (entmod (subst (cons 1 (nth n newtext)) str el))
  22.       )
  23.     )
  24.   )
  25. )
  26. (defun c:tt (/ e el str newstr strlst)
  27.   (while
  28.     (and (setq e (entsel "\nPick Old text: "))
  29.          (setq el (entget (car e)))
  30.          (= (cdr (assoc 0 el)) "TEXT")
  31.          (progn
  32.            (princ
  33.              (strcat "\nOld string: " (setq str (cdr (assoc 1 el))))
  34.            )
  35.            t
  36.          )
  37.          (setq newstr (getstring "\nNew text : "))
  38.     )
  39.      (setq strlst (cons (cons str newstr) strlst))
  40.   )
  41.   (if strlst
  42.     (mreplace strlst)
  43.   )
  44.   (princ)
  45. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-19 09:08:14 | 显示全部楼层
非常感谢XYP斑主和EACHY斑主为我写程序可小弟的问题还没有解决
1。XYP斑主的"xyp_lib。vlx")要在以上版本加载吧小弟的R14用不了啊!
2。EACHY出现加载错误,可能不是lisp程序吧:
Command: _appload
Loading F:\查找替换1.lsp ...
Error: malformed list*Cancel*
我想要的是R14下的lisp程序,
且直接把查找替换的内容写在程序里的
象”XYP斑主“那样的:

cond
    ((= #txt "%%1318@180") (sub_upd s1 1 "K8"))
    ((= #txt "%%1318@150") (sub_upd s1 1 "K5"))
    ((= #txt "%%1318@200") (sub_upd s1 1 "K"))
    ;;……用户自定义
   
还望各位帮忙啊!
先谢了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-6-19 10:51:54 | 显示全部楼层
源码:
  1. [FONT=courier new]
  2. (defun c:test ()
  3.                                         ;(CMDLA0)
  4.   (setq        ss (ssget '((0 . "TEXT")))
  5.         i  -1
  6.   )
  7.   (while (setq s1 (ssname ss (setq i (1+ i))))
  8.     (setq #txt (dxf 1 (entget s1)))
  9.     (cond-user)
  10.   )
  11.                                         ;(CMDLA1)
  12. )
  13. (defun cond-user ()
  14.   (cond
  15.     ((= #txt "%%1318@180") (sub_upd s1 1 "K8"))
  16.     ((= #txt "%%1318@150") (sub_upd s1 1 "K5"))
  17.     ((= #txt "%%1318@200") (sub_upd s1 1 "K"))
  18.     ;;……用户自定义
  19.     (t (princ))
  20.   )
  21. )
  22. (defun dxf (code elist / cc) (cdr (assoc code elist)))
  23. (defun sub_upd (ename code #new)
  24.   (setq        cc (subst (cons code #new)
  25.                   (assoc code (entget ename))
  26.                   (entget ename)))
  27.   (entmod cc)
  28.   (entupd ename)
  29. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-6-19 12:55:18 | 显示全部楼层
你用 R14 还是 2000 ?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-19 13:01:23 | 显示全部楼层
真诚感谢xyp1964班主
为我写了很好用的程序
向你敬礼!

我是我多年渴求的程序啊!

还想请你帮个忙
写一个R14下的LISP程序
实现如下功能

把同一个文件夹里的多个CAD文件作为块同时插入同一个CAD文件中
要求:
1。不指定文件的多少,也不指定文件名;
2。可不提供插入点,不同的文件有不同的插入点更好,插入点间距设为100000X100000

说简单一点:
现在CAD插块只能单选文件
而我要实现多选功能

肯请各位大吓和班主写个吧 !
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-6-19 13:03:18 | 显示全部楼层
很遗憾你还在用 R14,帮不了你,批量插图在晓东工具箱中有。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-19 14:35:21 | 显示全部楼层
晓东原来不是作过调查吗?
好象还有70%的人用R14哦!
所以我用也并不奇怪了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-6-19 15:14:47 | 显示全部楼层
确实“很遗憾你还在用 R14”,第二个要求帮不了你。
如果R14什么都行,ACAD就没必要升级了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-7-1 13:00:07 | 显示全部楼层
查找替换能自动加载
能响应命令,但不执行命令
请XYP1964斑主给我看一下
我错在哪里呀?


acadr14 .lisp里的片断为:

;; The following line loads the AutoLISP routines for AutoCAD Release 14.
;; Altering this line will affect the application's internet functionality.
(load "inet")
;; The following line conditionally loads AutoLISP routines for AutoCAD Release 14
;; Altering this line will affect bonus functionality
(load "bonus.lsp" "")
(load "c:/Program Files/AutoCAD R14/SUPPORT/gong/flatten.lsp")
(load "C:/Program Files/AutoCAD R14/SUPPORT/gong/形心.lsp")
(arxload "c:/Program Files/AutoCAD R14/SUPPORT/gong/sycadw1.arx")
(arxload "c:/Program Files/AutoCAD R14/SUPPORT/gong/asdehk.arx")
;(arxload "c:/Program Files/AutoCAD R14/SUPPORT/gong/Tchdwg.arx")
(load "c:/Program Files/AutoCAD R14/SUPPORT/gong/文字加减.LSP")
(load "c:/Program Files/AutoCAD R14/SUPPORT/gong/查找替换.lsp")
(load "c:/Program Files/AutoCAD R14/SUPPORT/gong/删短线.lsp")
(load "c:/Program Files/AutoCAD R14/SUPPORT/gong/按色分层.lsp")

查找替换.lsp里的代码是:

(defun c:B1 ()
                                        ;(CMDLA0)
  (setq        ss (ssget '((0 . "TEXT")))
        i  -1
  )
  (while (setq s1 (ssname ss (setq i (1+ i))))
    (setq #txt (dxf 1 (entget s1)))
    (cond-user)
  )
                                        ;(CMDLA1)
)
(defun cond-user ()
  (cond
    ((= #txt "%%1308@200") (sub_upd s1 1 ""))
    ((= #txt "%%1308@180") (sub_upd s1 1 ""))
    ((= #txt "%%1308@150") (sub_upd s1 1 ""))
    ((= #txt "%%1308@130") (sub_upd s1 1 "K5"))
    ((= #txt "%%13010@200") (sub_upd s1 1 "K5"))
    ((= #txt "%%13010@180") (sub_upd s1 1 "K3"))
    ((= #txt "%%13010@150") (sub_upd s1 1 "M"))
    ((= #txt "%%13010@130") (sub_upd s1 1 "M8"))
    ;;……用户自定义
    (t (princ))
  )
)
(defun dxf (code elist / cc) (cdr (assoc code elist)))
(defun sub_upd (ename code #new)
  (setq        cc (subst (cons code #new)
                  (assoc code (entget ename))
                  (entget ename)))
  (entmod cc)
  (entupd ename)
)

(defun c:L1 ()
                                        ;(CMDLA0)
  (setq        ss (ssget '((0 . "TEXT")))
        i  -1
  )
  (while (setq s1 (ssname ss (setq i (1+ i))))
    (setq #txt (dxf 1 (entget s1)))
    (cond-user)
  )
                                        ;(CMDLA1)
)
(defun cond-user ()
  (cond
    ((= #txt "%%130") (sub_upd s1 1 "["))
    ((= #txt "%%131") (sub_upd s1 1 "]"))
    ((= #txt "%%132") (sub_upd s1 1 "}"))
    ((= #txt "[10") (sub_upd s1 1 "]12"))
    ((= #txt "[12") (sub_upd s1 1 "]12"))
    ((= #txt "G4]12") (sub_upd s1 1 ""))
    ((= #txt "G2]12") (sub_upd s1 1 ""))
    ;;……用户自定义
    (t (princ))
  )
)
(defun dxf (code elist / cc) (cdr (assoc code elist)))
(defun sub_upd (ename code #new)
  (setq        cc (subst (cons code #new)
                  (assoc code (entget ename))
                  (entget ename)))
  (entmod cc)
  (entupd ename)
)


两个命令B1、L1都是一样的情况
肯请高手帮忙试一下,找一下原因啊!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-7-1 18:13:22 | 显示全部楼层
如果还用R14就帮不了了!呵呵……
学得不错,鼓励!
两个不同的程序,应用不同的子程序:
[php](defun c:B1 ()
  (setq        ss (ssget '((0 . "TEXT")))
        i  -1
  )
  (while (setq s1 (ssname ss (setq i (1+ i))))
    (setq #txt (dxf 1 (entget s1)))
    (cond-user1)
  )
)

(defun c:L1 ()
  (setq        ss (ssget '((0 . "TEXT")))
        i  -1
  )
  (while (setq s1 (ssname ss (setq i (1+ i))))
    (setq #txt (dxf 1 (entget s1)))
    (cond-user2)
  )
)

(defun cond-user1 ()
  (cond
    ((= #txt "%%1308@200") (sub_upd s1 1 ""))
    ((= #txt "%%1308@180") (sub_upd s1 1 ""))
    ((= #txt "%%1308@150") (sub_upd s1 1 ""))
    ((= #txt "%%1308@130") (sub_upd s1 1 "K5"))
    ((= #txt "%%13010@200") (sub_upd s1 1 "K5"))
    ((= #txt "%%13010@180") (sub_upd s1 1 "K3"))
    ((= #txt "%%13010@150") (sub_upd s1 1 "M"))
    ((= #txt "%%13010@130") (sub_upd s1 1 "M8"))
    (t (princ))
  )
)

(defun cond-user2 ()
  (cond
    ((= #txt "%%130") (sub_upd s1 1 "["))
    ((= #txt "%%131") (sub_upd s1 1 "]"))
    ((= #txt "%%132") (sub_upd s1 1 "}"))
    ((= #txt "[10") (sub_upd s1 1 "]12"))
    ((= #txt "[12") (sub_upd s1 1 "]12"))
    ((= #txt "G4]12") (sub_upd s1 1 ""))
    ((= #txt "G2]12") (sub_upd s1 1 ""))
    (t (princ))
  )
)
(defun dxf (code elist / cc) (cdr (assoc code elist)))
(defun sub_upd (ename code #new)
  (setq        cc (subst (cons code #new)
                  (assoc code (entget ename))
                  (entget ename)
           )
  )
  (entmod cc)
  (entupd ename)
)
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-7-2 09:42:21 | 显示全部楼层
xyp1964 大哥我对你的感激之情如滔滔江水。。。。。。。
但小弟我实在是烦固不化
只能用R14
还是要请你帮忙
我不把两个不同的程序写在同一个文件里
也出现上面同样的问题
如果不是小弟程序有错
请问还有没有办法啊?
acadr14 .lisp里的片断为:

;; The following line loads the AutoLISP routines for AutoCAD Release 14.
;; Altering this line will affect the application's internet functionality.
(load "inet")
;; The following line conditionally loads AutoLISP routines for AutoCAD Release 14
;; Altering this line will affect bonus functionality
(load "bonus.lsp" "")
(load "c:/Program Files/AutoCAD R14/SUPPORT/gong/flatten.lsp")
(load "C:/Program Files/AutoCAD R14/SUPPORT/gong/形心.lsp")
(arxload "c:/Program Files/AutoCAD R14/SUPPORT/gong/sycadw1.arx")
(arxload "c:/Program Files/AutoCAD R14/SUPPORT/gong/asdehk.arx")
;(arxload "c:/Program Files/AutoCAD R14/SUPPORT/gong/Tchdwg.arx")
(load "c:/Program Files/AutoCAD R14/SUPPORT/gong/文字加减.LSP")
(load "c:/Program Files/AutoCAD R14/SUPPORT/gong/查找替换.lsp")
(load "c:/Program Files/AutoCAD R14/SUPPORT/gong/删短线.lsp")
(load "c:/Program Files/AutoCAD R14/SUPPORT/gong/按色分层.lsp")

查找替换.lsp里的代码是:

(defun c:B1 ()
;(CMDLA0)
(setq ss (ssget '((0 . "TEXT")))
i -1
)
(while (setq s1 (ssname ss (setq i (1+ i))))
(setq #txt (dxf 1 (entget s1)))
(cond-user)
)
;(CMDLA1)
)
(defun cond-user ()
(cond
((= #txt "%%1308@200") (sub_upd s1 1 ""))
((= #txt "%%1308@180") (sub_upd s1 1 ""))
((= #txt "%%1308@150") (sub_upd s1 1 ""))
((= #txt "%%1308@130") (sub_upd s1 1 "K5"))
((= #txt "%%13010@200") (sub_upd s1 1 "K5"))
((= #txt "%%13010@180") (sub_upd s1 1 "K3"))
((= #txt "%%13010@150") (sub_upd s1 1 "M"))
((= #txt "%%13010@130") (sub_upd s1 1 "M8"))
;;……用户自定义
(t (princ))
)
)
(defun dxf (code elist / cc) (cdr (assoc code elist)))
(defun sub_upd (ename code #new)
(setq cc (subst (cons code #new)
(assoc code (entget ename))
(entget ename)))
(entmod cc)
(entupd ename)
)
多谢赐教!
请问你能不能给我个QQ号啊?
我想直接向你学习!
我的QQ是58368122
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-7-2 11:45:14 | 显示全部楼层
sub_upd 需要加载版主的通用程序吧?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-27 21:39 , Processed in 0.193861 second(s), 59 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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