明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2179|回复: 10

[已解答] 文字替换

[复制链接]
发表于 2015-7-22 07:04:03 | 显示全部楼层 |阅读模式
请问各位前辈,我有数据“100+300 JK 100X300 ML"要怎样才能一次性替换成“ 300+100 JK 300X100 NT"?我学习了很多大侠的贴子,但是目前只能一次替换一个数据,比如,第一次替换为“300+100 JK 100X300 ML",第二次替换为“300+100 JK 300X100 ML".第三次替换为”300+100 JK 300X100 NT".我用ssget选择数据第一次替换后,生成了新的数据,我又要用ssget再次选择,请问要怎样才能将替换一次性完成呢?????
发表于 2015-7-22 08:51:24 | 显示全部楼层
为何不能多次替换?

又或者不替换,直接抽取原数据内文字,组成新的文字即可。
 楼主| 发表于 2015-7-22 11:05:39 | 显示全部楼层
fl202 发表于 2015-7-22 08:51
为何不能多次替换?

又或者不替换,直接抽取原数据内文字,组成新的文字即可。

是这样的 每个数据都会有不一样,有多种组合,我也想多次替换,可我第一次用(setq ss(ssget '((0 . "*text") (1 . "*ML*"))))选择替换后,第二次我用(command "select" SS "")
(setq ss3 (ssget "_p" '((0 . "*TEXT") (1 . "*+*"))))就不能选择第一次替换生成的新数据了,我尝试用 (setq s0(entlast))
.....
(while (setq s0 (entnext s0))
    (setq ss (ssadd s0 ss))
  )把替换后生成的数据加入到选择集又不成功,请大师指教
发表于 2015-7-22 12:09:56 | 显示全部楼层
(defun c:tt()
  (setq str "100+300 JK 100X300 ML")
  (setq str(vl-string-subst "300+100" "100+300" str ))
  (setq str(vl-string-subst "300X100" "100X300" str ))
  (setq str(vl-string-subst "NT" "ML" str ))
  )

评分

参与人数 1明经币 +1 收起 理由
wayne_myles + 1 很给力!

查看全部评分

 楼主| 发表于 2015-7-22 15:12:51 | 显示全部楼层
edata 发表于 2015-7-22 12:09
(defun c:tt()
  (setq str "100+300 JK 100X300 ML")
  (setq str(vl-string-subst "300+100" "100+300" ...

请edata帮我看看像附件里的这种情况,有时有几百个数据,怎样一次性替换呢,"X"前后数据互换,"+"前后数据互换,"ML"替换为“NT”,“NT”替换为“ML”,多谢

本帖子中包含更多资源

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

x

点评

你这叫瞎折腾啊 , 写起来有一定难度  发表于 2015-7-22 16:45
发表于 2015-7-22 17:00:44 | 显示全部楼层
  1. ;;X,+,nt,ml文本交换
  2. ;;by edata @mjtd 2015-7-22
  3. (defun c:tt(/ elist en new_str ss str)
  4.   (princ "\n选择包含X,+,nt,ml的文本")
  5.   (if(setq ss(ssget '((0 . "text")(1 . "*+*,*X*,*NT*,*ML*"))))
  6.     (while (setq en (ssname ss 0))
  7.       (setq elist(entget en))
  8.       (setq str(cdr(assoc 1 elist)))
  9.       (setq new_str (sk_change_str str))
  10.       (entmod(subst(cons 1 new_str)(assoc 1 elist)elist))      
  11.       (setq ss(ssdel en ss))
  12.       )
  13.     )
  14.   (princ)
  15.   )
  16. ;;X,+,nt,ml字符交换
  17. (defun sk_change_str (str / i lst s  str1 a lst+ lstnt lstx str+ strx)  
  18.   (setq lst (sk_brstr str " ") str1 "")  
  19.   (while(setq a(car lst))
  20.     (cond
  21.       ((wcmatch a "*X*")
  22.        (setq lstx(sk_brstr a "X"))
  23.        (setq strx(strcat (cadr lstx) "X" (car lstx)))
  24.        (setq str1(strcat str1 " " strx))
  25.        )
  26.       ((wcmatch a "*+*")
  27.        (setq lst+(sk_brstr a "+"))
  28.        (setq str+(strcat (cadr lst+) "+" (car lst+)))
  29.        (setq str1(strcat str1 " " str+))
  30.        )
  31.       ((wcmatch a "*NT*")
  32.        (setq lstnt(vl-string-subst "ML" "NT"  a ))      
  33.        (setq str1(strcat str1 " " lstnt))
  34.        )
  35.       ((wcmatch a "*ML*")
  36.        (setq lstnt(vl-string-subst "NT" "ML"   a ))      
  37.        (setq str1(strcat str1 " " lstnt))
  38.        )
  39.       (t  (setq str1(strcat str1 (if (/= str1 "") " " "") a)))
  40.       )      
  41.     (setq lst(cdr lst))
  42.     )
  43.   (if (/= str1 "") str1 nil)
  44. )
  45. ;;字符串分割by edata
  46. (defun sk_brstr        (str br / I LST S STR1)
  47.   (setq        i 0
  48.         lst '()
  49.         str1 ""
  50.   )
  51.   (while (and (setq s (substr str (setq i (1+ i)) 1)) (/= s ""))
  52.     (if        (/= s br)
  53.       (setq str1 (strcat str1 s))
  54.       (if (/= str1 "")
  55.         (setq lst  (cons str1 lst)
  56.               str1 ""
  57.         )
  58.       )
  59.     )
  60.   )
  61.   (if (/= str1 "")
  62.     (setq lst  (cons str1 lst)
  63.           str1 ""
  64.     )
  65.   )
  66.   (setq lst (reverse lst))
  67. )
  68. (vl-load-com)
  69. (princ)

评分

参与人数 3明经币 +3 收起 理由
zctao1966 + 1 赞一个!
小师傅 + 1 很给力!谢谢E大,让我减轻不少工作量
lucas_3333 + 1 E大专门写了函数啊, 佩服!!!

查看全部评分

发表于 2015-7-22 18:05:17 | 显示全部楼层
edata 发表于 2015-7-22 17:00

虽然此主题感觉是乱来, 通用性不强,
但是E大写出了一个通用性的程序 ,
思路清晰, 结构清晰! 非常值得学习
让我等望尘莫及.....
发表于 2015-7-22 20:22:04 | 显示全部楼层
edata 发表于 2015-7-22 17:00

我也来凑凑热闹, 没有E大的做参考, 我是整不出来的, 再次感谢E大!
  1. (defun c:tt2(/ _swaptext ss en elist str)
  2. (defun _swaptext ( strobj / patlist str len pos)
  3.   (setq str strobj patlist '("###X###" "###+###"))
  4.   (mapcar '(lambda (pat / match)
  5.       (if (wcmatch str (strcat "*" pat "*"))
  6.         (setq len (strlen str) pos (1+ (vl-string-position (ascii (substr pat 4 1)) str))
  7.        str (vl-string-subst
  8.       (strcat (substr str (1+ pos) 3) (substr str pos 1) (substr str (- pos 3) 3) )
  9.       (substr str (- pos 3) 7)  str )))) patlist)
  10.   (cond
  11.     ((wcmatch str "*NT*")(setq str (vl-string-subst "ML" "NT" str)))
  12.     ((wcmatch str "*ML*")(setq str (vl-string-subst "NT" "ML" str))))
  13.   str
  14. );;end_swaptext
  15. (if(setq ss (ssget "x" '((0 . "TEXT"))))
  16.    (while (setq en (ssname ss 0))
  17.         (setq elist(entget en))
  18.         (setq str(cdr(assoc 1 elist)))
  19.         (setq elist (subst (cons 1 (_swaptext str)) (assoc 1 elist) elist))
  20.         (entmod elist)
  21.         (setq ss(ssdel en ss))
  22.    );;end_while
  23.   );;end_if
  24. (princ)
  25. );;end_defun


评分

参与人数 1明经币 +1 收起 理由
小师傅 + 1 赞一个!谢谢大侠的热心帮助

查看全部评分

发表于 2015-7-22 22:39:34 | 显示全部楼层
惭愧,大侠不敢当,菜鸟一枚,问题解决了,网页右边有个黄色的按钮,将此题状态置为已解决吧。
发表于 2015-7-22 23:10:14 | 显示全部楼层

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-5-21 17:51 , Processed in 0.227241 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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