Artek 发表于 2022-7-5 22:57:59

数字和Sy排序帮助

你好有没有人有想法或愿意分享如何在文本/多行文字/属性中对数字和符号进行排序的代码?我想按数字顺序对数字排序,然后在最后一个数字之前加上符号“&”。
 
 
例如:我在text/mtext/attribute值中以随机顺序得到这一行:
4, 3, 5, 2 & 1

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

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

pBe 发表于 2022-7-5 23:03:45

这是否仅限于一位数?不是这样的-->“11,12,14,13”
是否会出现缺少数字的情况?-->"5, 4, 2, 1"
那复制品呢?"1, 2, 3, 3, 4, 5"
 
还没有回复:anyhoo试试这个
 

(defun _sortto (str / nstr a b)
(setq        nstr ""
a    (vl-sort
       (read (strcat "("
                     (vl-string-translate
                     ",&"
                     ""
                     (strcase STR)
                     )
                     ")"
             )
       )
       '<
   )
)
(while (and (setq b (Car a))
      (> (length a) 2)
)
   (setq nstr (strcat nstr (itoa b) ", ")
a    (cdr a)
   )
)
(strcat nstr (itoa (car a)) " & " (itoa (cadr a)))
)

 
_$(_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"

Artek 发表于 2022-7-5 23:07:07

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

ymg3 发表于 2022-7-5 23:13:37

阿泰克,
 
发布一个需要处理的典型图形怎么样?
 
将删除一些猜测工作。
 
ymg公司

Artek 发表于 2022-7-5 23:17:05

您好,ymg3,
 
 
谢谢它只是一行普通的文本、多行文字或属性值,有时有多个数字按随机顺序排列。我已按要求附上一张样图。根据他的样本测试,pBe的代码似乎达到了我想要的效果,但我正在努力填补缺失的部分。
区块编号。图纸

pBe 发表于 2022-7-5 23:20:43

 
对于属性,您是否会使用专门用于此块名称“块编号”的例程?

Artek 发表于 2022-7-5 23:26:07

 
 
对只有名为“block Number”的块和该属性值需要排序。如果可以编写一个代码来处理三个不同的对象(文本/多行文字/属性),那么这将是理想的。但是如果不可能,那么我宁愿有一个可以更新属性值的例程,因为这是最耗时的。

pBe 发表于 2022-7-5 23:29:08

代码更新
(defun c:sns ( / _sorttoss i e dz)
;;;                        pBe Jun2014                        ;;;
(setq dz (getvar 'Dimzin))(setvar 'Dimzin   
(defun _sortto (str / _roi nstr a b)
(setq _roi (lambda (v)
   ((if (Eq (type v) 'INT)
itoa rtos) v)))

(setq        nstr ""
str(vl-string-translate"-" "." str)
a    (vl-sort
       (read
       (strcat
           "("
           (vl-string-translate
           "ABCDEFGHIJKLMNOPQRSTUVWXYZ,&!@#$%^*()_+=/\\<>{}[]|:;'\""
             "                                                      " (Strcase str)
           )
           ")"
       )
       )
       '<
   )
)
(while (and (setq b (Car a))
      (> (length a) 2)
)
   (setq nstr (strcat nstr (_roi b) ", ")
a    (cdr a)
   )
)
(if (>= (length a) 2)
(vl-string-translate"." "-" (strcat nstr (_roi (car a)) " & " (_roi (cadr a))))
   str)
)

(princ "\nSelect TEXT/MTEXT/ATTRIBUTE")
(if(setq ss (ssget "_:L"
              '((-4 . "<OR") (-4 . "<AND")
                (0 . "INSERT")(2 . "Block Number")
                (-4 . "AND>") (-4 . "<AND")
                (0 . "TEXT,MTEXT") (1 . "#*#")
                (-4 . "AND>")(-4 . "OR>")
             )
       )
   )
(repeat (setq i (sslength ss))
   (if        (eq "AcDbBlockReference"
    (vla-get-ObjectName
      (setq
        e (vlax-ename->vla-object (ssname ss (setq i (1- i))))
      )
    )
)
   (foreach att (vlax-invoke e 'GetAttributes)
(if (wcmatch (setq str (vla-get-textstring att))
           "#*#"
    )
(Vla-put-textstring att (_sortto str))
)
   )
   (vla-put-textstring e (_sortto (vla-get-textstring e)))
   )
)
)(setvar 'Dimzin dz)
(princ)
)

Artek 发表于 2022-7-5 23:34:29

哇!你是个天才!真是太棒了!非常感谢你。

Artek 发表于 2022-7-5 23:37:38

很抱歉让人难过,pBe。当我运行您的代码时,我刚刚遇到一个属性,其中一些长数字被一个连字符(如34-37)缩短,我得到了这个错误消息:比较的参数类型错误。这很容易修复吗?
页: [1] 2
查看完整版本: 数字和Sy排序帮助