找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 647|回复: 3

[编程申请]:对以W开头的字符串执行操作后由左边变成右边

[复制链接]
发表于 2005-8-31 12:17:46 | 显示全部楼层 |阅读模式

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

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

×
对以W开头的字符串执行操作后由左边变成右边
W2?12变成Y2?12
W2?12/2变成Y2X2?12
W2?12/3变成Y3X2?12
W2?14/3变成Y3X2?14
W2?12/5变成Y5X2?12
余类推,特征是
1、只对以W开头的字符串才改变
2、将W变成Y
3、将/a变成aX插入到Y的后面

能用于CAD2002及以下版本的LSP
以下有附件可供测试,谢谢。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-8-31 14:19:10 | 显示全部楼层
;下面的程序段已测试通过,供参考。

  1. (defun c:W2Y(/ ss sn si i ed d1 d11 pos dlast)
  2.   (setq ss(ssget "x" (list(cons 0 "TEXT"))))
  3.   (setq sn(if ss(sslength ss) 0))
  4.   (setq i 0)
  5.   (while(< i sn)
  6.     (setq si(ssname ss i) ed(entget si) d1(cdr(assoc 1 ed)))
  7.     (if(= (substr d1 1 1) "W")
  8.       (progn
  9.         (setq pos(getPos d1))
  10.         (cond
  11.           (pos
  12.              (setq dlast(substr d1 (1+ pos)))
  13.              (setq d11(strcat "Y" dlast "X" (substr d1 2 (- pos 2))))
  14.           )
  15.           (t
  16.              (setq d11(strcat "Y" (substr d1 2)))
  17.           )
  18.         )
  19.         (setq ed(subst (cons 1 d11)(assoc 1 ed) ed))
  20.         (entmod ed)
  21.       )
  22.     )
  23.     (setq i(1+ i))
  24.   )
  25.   (alert "W->Y结束。")
  26.   (princ)
  27. )
  28. ;
  29. (defun getPos(ws / n j pos)
  30.   (setq n(strlen ws) j 2)
  31.   (while(and(< j n)(not pos))
  32.     (if(= (substr ws j 1) "/")
  33.       (setq pos j)
  34.     )
  35.     (setq j(1+ j))
  36.   )
  37.   pos
  38. )
  39. ;
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 10399个

财富等级: 富甲天下

发表于 2005-8-31 14:27:20 | 显示全部楼层
程序:

  1. ;晓东 zxq0220
  2. ;对以W开头的字符串执行操作后由左边变成右边
  3. ;W2?12变成Y2?12
  4. ;W2?12/2变成Y2X2?12
  5. ;W2?12/3变成Y3X2?12
  6. ;W2?14/3变成Y3X2?14
  7. ;W2?12/5变成Y5X2?12
  8. ;余类推,特征是
  9. ;1、只对以W开头的字符串才改变
  10. ;2、将W变成Y
  11. ;3、将/a变成aX插入到Y的后面
  12. (DEFUN C:CHSTR2 ()
  13. (IF (SETQ SS (SSGET "X" '((0 . "TEXT") (1 . "W*")))) (PROGN
  14.   (SETQ I 0)
  15.   (REPEAT (SSLENGTH SS)
  16.    (SETQ ENT (ENTGET (SSNAME SS I)) I (1+ I)
  17.          STR (CDR (ASSOC 1 ENT))
  18.          STL (STRLEN STR)
  19.          J 1)
  20.    (IF (WCMATCH STR "W*/*") (PROGN
  21.     (WHILE (AND (< J STL) (/= (SUBSTR STR J 1) "/")) (SETQ J (1+ J)))
  22.     (SETQ STR1 (STRCAT "Y" (SUBSTR STR (1+ J)) "X" (SUBSTR STR 2 (- J 2))))
  23.    )
  24.     (SETQ STR1 (STRCAT "Y" (SUBSTR STR 2)))
  25.    )
  26.    (SETQ ENT (SUBST (CONS 1 STR1) (CONS 1 STR) ENT))
  27.    (ENTMOD ENT)
  28.   )
  29. ))
  30. (PRINC)
  31. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 23:21 , Processed in 0.175532 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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