乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 45|回复: 11

[编程交流] 交换函数

[复制链接]

36

主题

161

帖子

125

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
182
发表于 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

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 19:00:26 | 显示全部楼层
  1. (defun c:swaptext ( / patlist str len pos)
  2. (setq str "250X550 SC 100+200 NT" patlist '("###X###" "###+###"))
  3. (mapcar '(lambda (pat / match)
  4.      (if (wcmatch str (strcat "*" pat "*"))
  5.        (setq len (strlen str) pos (1+ (vl-string-position (ascii (substr pat 4 1)) str))
  6.       str (vl-string-subst
  7.      (strcat (substr str (1+ pos) 3) (substr str pos 1) (substr str (- pos 3) 3) )
  8.      (substr str (- pos 3) 7)  str )))) patlist)
  9. (cond
  10.    ((wcmatch str "*NT*")(setq str (vl-string-subst "ML" "NT" str)))
  11.    ((wcmatch str "*ML*")(setq str (vl-string-subst "NT" "ML" str))))
  12. str
  13. )

使用固定文本进行测试,但您当然可以将str作为参数
gr.Rlx
回复

使用道具 举报

36

主题

161

帖子

125

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
182
发表于 2022-7-5 19:02:29 | 显示全部楼层
 
非常感谢你。Rlx,
你帮了我很多
有一个函数可以将转换选择设置为字符串吗?
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 19:11:44 | 显示全部楼层
??? 恐怕你必须更具体一点。我想你想选择一些文本/属性实体并在其上运行这个交换功能?
 
 
gr.R。
回复

使用道具 举报

36

主题

161

帖子

125

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
182
发表于 2022-7-5 19:16:46 | 显示全部楼层
 
  1. (setq ss (ssget "x" '((0 . "TEXT"))))
  2. (setq en (ssname ss 0))
  3. (setq elist(entget en))
  4. (setq str(cdr(assoc 1 elist)))
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 19:17:49 | 显示全部楼层
  1. ;substitute text value with swapped text
  2. (setq elist (subst (cons 1 (swaptext str) (assoc 1 elist) elist))
  3. ;update entity list
  4. (entmod elist)

 
 
使swaptext类似(defun swaptext(str/…),不带c:前缀
 
 
gr.R
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-5 19:24:58 | 显示全部楼层
交换的原因是什么?这是一次性修复吗?或者您想要一个不限于300X150 NC 300 NT==>150X300 NC 300 ML之类的通用“交换”例程吗?和/或反之亦然?
回复

使用道具 举报

36

主题

161

帖子

125

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
182
发表于 2022-7-5 19:31:01 | 显示全部楼层
 
好啊解决谢谢rlx。
回复

使用道具 举报

36

主题

161

帖子

125

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
182
发表于 2022-7-5 19:37:11 | 显示全部楼层
 
pBe,感谢您的关注。一次修复,反之亦然,是的。
可以做一个通用的“交换”例程吗?你有什么建议?
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 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”
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-12 13:20 , Processed in 0.387956 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表