乐筑天下

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

[编程交流] 数字和Sy排序帮助

[复制链接]

14

主题

68

帖子

54

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-5 22:57:59 | 显示全部楼层 |阅读模式
你好有没有人有想法或愿意分享如何在文本/多行文字/属性中对数字和符号进行排序的代码?我想按数字顺序对数字排序,然后在最后一个数字之前加上符号“&”。
 
 
例如:我在text/mtext/attribute值中以随机顺序得到这一行:
4, 3, 5, 2 & 1

4、&3、5、2、1(错位“&”)

4.3.5.2.1(缺少“,”和“&”)
 
 
有没有可能按照这个数字顺序重新排列它们,包括符号“,”和“&”(如果它们丢失或放错了位置,可以添加它们)使其看起来像这样?
 
 
1, 2, 3, 4 & 5
 
 
我需要整理很多用不同格式键入的文本绘制的旧图纸,这样做简直是一场噩梦。
 
任何帮助都将不胜感激。谢谢
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-5 23:03:45 | 显示全部楼层
这是否仅限于一位数?不是这样的-->“11,12,14,13”
是否会出现缺少数字的情况?-->"5, 4, 2, 1"
那复制品呢?"1, 2, 3, 3, 4, 5"
 
还没有回复:anyhoo试试这个
 
  1. (defun _sortto (str / nstr a b)
  2. (setq        nstr ""
  3. a    (vl-sort
  4.        (read (strcat "("
  5.                      (vl-string-translate
  6.                        ",&"
  7.                        "  "
  8.                        (strcase STR)
  9.                      )
  10.                      ")"
  11.              )
  12.        )
  13.        '<
  14.      )
  15. )
  16. (while (and (setq b (Car a))
  17.       (> (length a) 2)
  18. )
  19.    (setq nstr (strcat nstr (itoa b) ", ")
  20.   a    (cdr a)
  21.    )
  22. )
  23. (strcat nstr (itoa (car a)) " & " (itoa (cadr a)))
  24. )

 
_$(_sortto“4、3、5、2和1”)
"1, 2, 3, 4 & 5"
_$(_sortto“4 3 5 2 1”)
"1, 2, 3, 4 & 5"
_$(_sortto“4,3,5,2,1”)
"1, 2, 3, 4 & 5"
_$(_sortto“14、3、5、23和1”)
"1, 3, 5, 14 & 23"
回复

使用道具 举报

14

主题

68

帖子

54

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-5 23:07:07 | 显示全部楼层
你好,pBE,
 
 
谢谢你的快速回复。回答您的问题:
 
 
 
 
这是否仅限于一位数?不是这样的--->“11,12,14,13”不。它不限于一位数。其中一些数字高达4位。
是否会出现缺少数字的情况?-->“5,4,2,1”不。只有已经存在的。但是“,”和“&”符号可能会丢失。
那复制品呢?“1、2、3、3、4、5”无重复。
干杯
回复

使用道具 举报

0

主题

301

帖子

301

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 23:13:37 | 显示全部楼层
阿泰克,
 
发布一个需要处理的典型图形怎么样?
 
将删除一些猜测工作。
 
ymg公司
回复

使用道具 举报

14

主题

68

帖子

54

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-5 23:17:05 | 显示全部楼层
您好,ymg3,
 
 
谢谢它只是一行普通的文本、多行文字或属性值,有时有多个数字按随机顺序排列。我已按要求附上一张样图。根据他的样本测试,pBe的代码似乎达到了我想要的效果,但我正在努力填补缺失的部分。
区块编号。图纸
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-5 23:20:43 | 显示全部楼层
 
对于属性,您是否会使用专门用于此块名称“块编号”的例程?
回复

使用道具 举报

14

主题

68

帖子

54

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-5 23:26:07 | 显示全部楼层
 
 
对只有名为“block Number”的块和该属性值需要排序。如果可以编写一个代码来处理三个不同的对象(文本/多行文字/属性),那么这将是理想的。但是如果不可能,那么我宁愿有一个可以更新属性值的例程,因为这是最耗时的。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-5 23:29:08 | 显示全部楼层
代码更新[12014年6月]
  1. (defun c:sns ( / _sortto  ss i e dz)
  2. ;;;                        pBe Jun2014                        ;;;
  3. [color="blue"](setq dz (getvar 'Dimzin))(setvar 'Dimzin   [/color]
  4. (defun _sortto (str / _roi nstr a b)
  5. [color="blue"](setq _roi (lambda (v)
  6.      ((if (Eq (type v) 'INT)
  7. itoa rtos) v)))[/color]
  8. (setq        nstr ""
  9. [color="blue"]str  (vl-string-translate  "-" "." str)[/color]
  10. a    (vl-sort
  11.        (read
  12.          (strcat
  13.            "("
  14.            (vl-string-translate
  15.             [color="blue"] "ABCDEFGHIJKLMNOPQRSTUVWXYZ,&!@#$%^*()_+=/\\<>{}[]|:;'""
  16.              "                                                      "[/color] (Strcase str)
  17.            )
  18.            ")"
  19.          )
  20.        )
  21.        '<
  22.      )
  23. )
  24. (while (and (setq b (Car a))
  25.       (> (length a) 2)
  26. )
  27.    (setq nstr (strcat nstr (_roi b) ", ")
  28.   a    (cdr a)
  29.    )
  30. )
  31. (if (>= (length a) 2)
  32. [color="blue"](vl-string-translate  "." "-"[/color] (strcat nstr (_roi (car a)) " & " (_roi (cadr a))))
  33.    str)
  34. )
  35. (princ "\nSelect TEXT/MTEXT/ATTRIBUTE")
  36. (if  (setq ss (ssget "_:L"
  37.               '((-4 . "<OR") (-4 . "<AND")
  38.                 (0 . "INSERT")(2 . "Block Number")
  39.                 (-4 . "AND>") (-4 . "<AND")
  40.                 (0 . "TEXT,MTEXT") (1 . "#*#")
  41.                 (-4 . "AND>")(-4 . "OR>")
  42.                )
  43.        )
  44.      )
  45. (repeat (setq i (sslength ss))
  46.    (if        (eq "AcDbBlockReference"
  47.     (vla-get-ObjectName
  48.       (setq
  49.         e (vlax-ename->vla-object (ssname ss (setq i (1- i))))
  50.       )
  51.     )
  52. )
  53.      (foreach att (vlax-invoke e 'GetAttributes)
  54. (if (wcmatch (setq str (vla-get-textstring att))
  55.             [color="blue"] "#*#"[/color]
  56.     )
  57.   (Vla-put-textstring att (_sortto str))
  58. )
  59.      )
  60.      (vla-put-textstring e (_sortto (vla-get-textstring e)))
  61.    )
  62. )
  63. )[color="blue"](setvar 'Dimzin dz)[/color]
  64. (princ)
  65. )
回复

使用道具 举报

14

主题

68

帖子

54

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-5 23:34:29 | 显示全部楼层
哇!你是个天才!真是太棒了!非常感谢你。
回复

使用道具 举报

14

主题

68

帖子

54

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-5 23:37:38 | 显示全部楼层
很抱歉让人难过,pBe。当我运行您的代码时,我刚刚遇到一个属性,其中一些长数字被一个连字符(如34-37)缩短,我得到了这个错误消息:比较的参数类型错误。这很容易修复吗?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 03:03 , Processed in 0.555253 second(s), 72 queries .

© 2020-2025 乐筑天下

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