找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: lengliqun

[编程申请]:(高难度)从含有K1的长字符串中提取其括号及括号内的字符如(2)

[复制链接]
 楼主| 发表于 2005-3-17 09:23:53 | 显示全部楼层
经测试15楼程序完全可用,谢谢。13楼的LSP能全自动处理吗?那当然更好了,省得我每个含括号的特征字符串都要点选一下(每张图几十下),可13楼的LSP我回空车后,毫无动静(win2000+acad2002)。不好意思地说一下,我是个程序盲,只会加载使用一下,不会调试修改,zxq0220 大侠已帮了我很多忙,谢谢了,期待您的再次出手。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 11288个

财富等级: 富甲天下

发表于 2005-3-17 14:27:27 | 显示全部楼层
调试过的13楼程序:
[php]
(DEFUN C:ADDPOST ()
(SETQ SN (CAR (ENTSEL "\nPlease Select a Text 请选择带括弧的文本<全选> :")))
(IF (/= SN nil) (PROGN
  (SETQ EN (ENTGET SN)
        STR (CDR (ASSOC 1 EN))
        STL (STRLEN STR)
        J 1 JJ -1)
  (WHILE (< J STL)
   (IF (= (SUBSTR STR J 1) "(")
    (SETQ JJ J J STL)
    (SETQ J (1+ J))
   )
  )
  (IF (> JJ 0) (PROGN
   (SETQ STR1 (SUBSTR STR 1 (1- JJ))
         J JJ J1 JJ)
   (WHILE (< J STL)
    (IF (= (SUBSTR STR J 1) ")")
     (SETQ JJ J J STL)
     (SETQ J (1+ J))
    )
   )
   (SETQ STR2 (SUBSTR STR J1 (- JJ J1 -1)))
   (PRINC "\nSelect Text(s) That You Want to Change 请选择要更改的文本 :")
   (IF (SETQ SS (SSGET '((0 . "TEXT")))) (PROGN
    (SETQ I 0 SL (SSLENGTH SS))
    (REPEAT SL
     (SETQ EN (ENTGET (SSNAME SS I))
           I (1+ I)
           STR (CDR (ASSOC 1 EN)))
     (IF (= STR STR1) (PROGN
      (SETQ STR3 (STRCAT STR STR2)
            EN (SUBST (CONS 1 STR3) (CONS 1 STR) EN))
      (ENTMOD EN)
     ))
    )
   ))
  ))
) (PROGN
(SETQ SS1 (SSGET "X" '((0 . "TEXT") (1 . "*(*)*")))
       I 0 SL (SSLENGTH SS1))
(REPEAT SL
  (SETQ STR (CDR (ASSOC 1 (ENTGET (SSNAME SS1 I))))
        I (1+ I)
        STL (STRLEN STR) J 1 JJ -1)
  (WHILE (< J STL)
   (IF (= (SUBSTR STR J 1) "(")
    (SETQ JJ J J STL)
    (SETQ J (1+ J))
   )
  )
  (IF (> JJ 0) (PROGN
   (SETQ STR1 (SUBSTR STR 1 (1- JJ))
         J JJ J1 JJ)
   (WHILE (< J STL)
    (IF (= (SUBSTR STR J 1) ")")
     (SETQ JJ J J STL)
     (SETQ J (1+ J))
    )
   )
   (SETQ STR2 (SUBSTR STR J1 (- JJ J1 -1)))
   (IF (SETQ SS2 (SSGET "X" (LIST (CONS 0 "TEXT") (CONS 1 STR1)))) (PROGN
    (SETQ K 0 SSL (SSLENGTH SS2))
    (REPEAT SSL
     (SETQ EN (ENTGET (SSNAME SS2 K))
           K (1+ K)
           STR (CDR (ASSOC 1 EN)))
     (IF (= STR STR1) (PROGN
      (SETQ STR3 (STRCAT STR STR2)
            EN (SUBST (CONS 1 STR3) (CONS 1 STR) EN))
      (ENTMOD EN)
     ))
    )
   ))
  ))
)
))
(PRINC)
)
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-17 20:46:30 | 显示全部楼层
全选的时候,楼上程序对例图 的 k2  k4结果错误
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-18 11:04:04 | 显示全部楼层
经500多个字符串测试,17楼LSP全选的时候完美可用,对例图 的 k2 k4结果错误 可能因图中隐藏字符.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 11288个

财富等级: 富甲天下

发表于 2005-3-18 22:29:29 | 显示全部楼层
经进一步调试通过

  1. (DEFUN C:ADDPOST ()
  2. (SETQ SN (CAR (ENTSEL "\nPlease Select a Text 请选择带括弧的文本<全选> :")))
  3. (IF (/= SN nil) (PROGN
  4.   (SETQ EN (ENTGET SN)
  5.         STR (CDR (ASSOC 1 EN))
  6.         STL (STRLEN STR)
  7.         J 1 JJ -1)
  8.   (WHILE (< J STL)
  9.    (IF (= (SUBSTR STR J 1) "(")
  10.     (SETQ JJ J J STL)
  11.     (SETQ J (1+ J))
  12.    )
  13.   )
  14.   (IF (> JJ 0) (PROGN
  15.    (SETQ STR1 (SUBSTR STR 1 (1- JJ))
  16.          J JJ J1 JJ)
  17.    (WHILE (< J STL)
  18.     (IF (= (SUBSTR STR J 1) ")")
  19.      (SETQ JJ J J STL)
  20.      (SETQ J (1+ J))
  21.     )
  22.    )
  23.    (SETQ STR2 (SUBSTR STR J1 (- JJ J1 -1)))
  24.    (PRINC "\nSelect Text(s) That You Want to Change 请选择要更改的文本 :")
  25.    (IF (SETQ SS (SSGET '((0 . "TEXT")))) (PROGN
  26.     (SETQ I 0 SL (SSLENGTH SS))
  27.     (REPEAT SL
  28.      (SETQ EN (ENTGET (SSNAME SS I))
  29.            I (1+ I)
  30.            STR (CDR (ASSOC 1 EN)))
  31.      (IF (= STR STR1) (PROGN
  32.       (SETQ STR3 (STRCAT STR STR2)
  33.             EN (SUBST (CONS 1 STR3) (CONS 1 STR) EN))
  34.       (ENTMOD EN)
  35.      ))
  36.     )
  37.    ))
  38.   ))
  39. ) (PROGN
  40. (SETQ SS1 (SSGET "X" '((0 . "TEXT") (1 . "*(*)*")))
  41.        I 0 SL (SSLENGTH SS1))
  42. (REPEAT SL
  43.   (SETQ STR (CDR (ASSOC 1 (ENTGET (SSNAME SS1 I))))
  44.         I (1+ I)
  45.         STL (STRLEN STR) J 1 JJ -1)
  46.   (WHILE (< J STL)
  47.    (IF (= (SUBSTR STR J 1) "(")
  48.     (SETQ JJ J J STL)
  49.     (SETQ J (1+ J))
  50.    )
  51.   )
  52.   (IF (> JJ 0) (PROGN
  53.    (SETQ STR1 (SUBSTR STR 1 (1- JJ))
  54.          J JJ J1 JJ)
  55.    (WHILE (< J STL)
  56.     (IF (= (SUBSTR STR J 1) ")")
  57.      (SETQ JJ J J STL)
  58.      (SETQ J (1+ J))
  59.     )
  60.    )
  61.    (SETQ STR2 (SUBSTR STR J1 (IF (= JJ J1) (- J J1 -1) (- JJ J1 -1))))
  62.    (IF (SETQ SS2 (SSGET "X" (LIST (CONS 0 "TEXT") (CONS 1 STR1)))) (PROGN
  63.     (SETQ K 0 SSL (SSLENGTH SS2))
  64.     (REPEAT SSL
  65.      (SETQ EN (ENTGET (SSNAME SS2 K))
  66.            K (1+ K)
  67.            STR (CDR (ASSOC 1 EN)))
  68.      (IF (= STR STR1) (PROGN
  69.       (SETQ STR3 (STRCAT STR STR2)
  70.             EN (SUBST (CONS 1 STR3) (CONS 1 STR) EN))
  71.       (ENTMOD EN)
  72.      ))
  73.     )
  74.    ))
  75.   ))
  76. )
  77. ))
  78. (PRINC)
  79. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-21 00:30:05 | 显示全部楼层

  1. ;| [url]http://www.xdcad.net/forum/showthread.php?postid=1716822#post1716822[/url]
  2. 从含有K1的长字符串中提取其括号及括号内的字符如(2)
  3. 作为后缀加到其它对应的短字符串如K1后,使K1变成K1(2)
  4. |;
  5. (defun c:akpost ( / a ss i lst ss2 fi ent)
  6.   (command ".undo" "be")
  7.   (or (setq a (entsel "\nPlease Select a Text 请选择带括弧的文本<全选> :"))
  8.       (setq ss (ssget "X" '((0 . "TEXT")(1 . "K*(*)*")))))
  9.   (setq i -1)
  10.   (if a
  11.     (setq lst (list (getpost (car a))))
  12.     (mapcar '(lambda (x)
  13.                (if (not (member (setq xx (getpost x)) lst))
  14.                  (setq lst (cons xx lst))
  15.                )
  16.              )
  17.             (ss2lst ss)
  18.     )
  19.   )
  20.   (mapcar '(lambda(x / ss2 fi)
  21.              (setq fi (list (cons 0 "TEXT")(cons 1 (strcat "K" (car x)))))
  22.              (if a
  23.                (progn
  24.                  (princ "\nSelect Text(s) That You Want to Change 请选择要更改的文本<全选> :")
  25.                  (or (setq ss2 (ssget fi))
  26.                      (setq ss2 (ssget "x" fi))
  27.                  )
  28.                )
  29.                (setq ss2 (ssget "x" fi))
  30.              )
  31.              (if ss2
  32.              (mapcar
  33.                '(lambda        (y / ent)
  34.                   (setq ent (entget y))
  35.                   (entmod
  36.                     (subst (cons 1 (strcat (cdr (assoc 1 ent)) (cadr x)))
  37.                            (assoc 1 ent)
  38.                            ent
  39.                     )
  40.                   )
  41.                 )
  42.                (ss2lst ss2)
  43.              ) )
  44.            )
  45.            lst
  46.   )
  47.   (command ".undo" "e")
  48.   (princ)
  49. )
  50. ;; ss2lst.
  51. (defun ss2lst (sset / i e elst)
  52.   (setq i -1)
  53.   (while (setq e (ssname sset (setq i (1+ i))))
  54.     (setq elst (cons e elst))
  55.   );(reverse lst)
  56. )
  57. ;; getpost.  (getpost (setq e (car(entsel))))
  58. (defun getpost (e / ent str n)
  59.   (setq ent(entget e)
  60.         str(substr (cdr(assoc 1 ent)) 2 ))
  61.   (list(substr str 1  (setq n (vl-string-position (ascii "(") str)))
  62.        (substr str (1+ n) (vl-string-position (ascii ")") str)))
  63. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-22 14:52 , Processed in 0.190701 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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