交换函数
亲爱的朋友。我想要
“300X100 JC 100+300 ML”=更改为>“100X300 JC 300+100 NT”
“250X550 SC 100+200 NT”=更改为>“500X250”SC 200+100 ML
一些字符串如下:
300X100 JC 100+300毫升==>100X300 JC 300+100毫升
200X400 DC 500===>400X200 DC 500
300X150 NC 300 NT==>150X300 NC 300ML
100X350 CF 200+100 ML==>350X100 CF 100+200 NT
JC 100+200毫升===>JC 200+100毫升
250X550 SC 100+200 NT=>550X250 SC 200+100毫升
可以生成这样的函数吗?
(定义swaptext(str/str1)
.....
.....
(defun c:swaptext ( / patlist str len pos)
(setq str "250X550 SC 100+200 NT" patlist '("###X###" "###+###"))
(mapcar '(lambda (pat / match)
(if (wcmatch str (strcat "*" pat "*"))
(setq len (strlen str) pos (1+ (vl-string-position (ascii (substr pat 4 1)) str))
str (vl-string-subst
(strcat (substr str (1+ pos) 3) (substr str pos 1) (substr str (- pos 3) 3) )
(substr str (- pos 3) 7)str )))) patlist)
(cond
((wcmatch str "*NT*")(setq str (vl-string-subst "ML" "NT" str)))
((wcmatch str "*ML*")(setq str (vl-string-subst "NT" "ML" str))))
str
)
使用固定文本进行测试,但您当然可以将str作为参数
gr.Rlx
非常感谢你。Rlx,
你帮了我很多
有一个函数可以将转换选择设置为字符串吗? ??? 恐怕你必须更具体一点。我想你想选择一些文本/属性实体并在其上运行这个交换功能?
gr.R。
(setq ss (ssget "x" '((0 . "TEXT"))))
(setq en (ssname ss 0))
(setq elist(entget en))
(setq str(cdr(assoc 1 elist)))
;substitute text value with swapped text
(setq elist (subst (cons 1 (swaptext str) (assoc 1 elist) elist))
;update entity list
(entmod elist)
使swaptext类似(defun swaptext(str/…),不带c:前缀
gr.R 交换的原因是什么?这是一次性修复吗?或者您想要一个不限于300X150 NC 300 NT==>150X300 NC 300 ML之类的通用“交换”例程吗?和/或反之亦然?
好啊解决谢谢rlx。
pBe,感谢您的关注。一次修复,反之亦然,是的。
可以做一个通用的“交换”例程吗?你有什么建议? 我们可以编写一个通用代码,但如果有比你帖子上显示的条件更多的条件,你需要现在告诉我。e、 g.在单个字符串上有两个以上的字符串要更改,例如JC和NT到RE和ML?
示例
“300X100 JC 100+300 ML”-->“100X300 RE 300+100 NT
“50X1000 NC 300 NT”-->“1000X50 NC 300 ML”
页:
[1]
2