DuanJinHui 发表于 2022-7-5 18:50:06

交换函数

亲爱的朋友。
 
我想要
“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)
.....
.....

rlx 发表于 2022-7-5 19:00:26


(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

DuanJinHui 发表于 2022-7-5 19:02:29

 
非常感谢你。Rlx,
你帮了我很多
有一个函数可以将转换选择设置为字符串吗?

rlx 发表于 2022-7-5 19:11:44

??? 恐怕你必须更具体一点。我想你想选择一些文本/属性实体并在其上运行这个交换功能?
 
 
gr.R。

DuanJinHui 发表于 2022-7-5 19:16:46

 

(setq ss (ssget "x" '((0 . "TEXT"))))
(setq en (ssname ss 0))
(setq elist(entget en))
(setq str(cdr(assoc 1 elist)))

rlx 发表于 2022-7-5 19:17:49


;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

pBe 发表于 2022-7-5 19:24:58

交换的原因是什么?这是一次性修复吗?或者您想要一个不限于300X150 NC 300 NT==>150X300 NC 300 ML之类的通用“交换”例程吗?和/或反之亦然?

DuanJinHui 发表于 2022-7-5 19:31:01

 
好啊解决谢谢rlx。

DuanJinHui 发表于 2022-7-5 19:37:11

 
pBe,感谢您的关注。一次修复,反之亦然,是的。
可以做一个通用的“交换”例程吗?你有什么建议?

pBe 发表于 2022-7-5 19:41:55

我们可以编写一个通用代码,但如果有比你帖子上显示的条件更多的条件,你需要现在告诉我。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
查看完整版本: 交换函数