jan_ek 发表于 2022-7-5 22:55:30

[自动LIS]排序代码

你好
与以这种方式获得的AutoLISP一样,排序列表。(见附件)。

Lee Mac 发表于 2022-7-5 22:59:46

查看此线程:
 
http://www.theswamp.org/index.php?topic=41463

jan_ek 发表于 2022-7-5 23:03:54

非常感谢你。

jan_ek 发表于 2022-7-5 23:05:50

; ----- 表达式周围出错-----
(VL-STRING-ELT A I)
;
; 错误:参数类型错误;在处应为
 
对于列表(附加)
函数eea-str\u int\u sort2
 
???
lista。txt文件

irneb 发表于 2022-7-5 23:10:24

该列表似乎包含符号名而不是字符串。此外,您还没有包括其余的代码。
 
从这个错误来看,I变量似乎不包含整数。请参阅vl string elt的帮助。
 
你使用了其他线程中的任何特定defun吗?还是你在其中改变了什么?

jan_ek 发表于 2022-7-5 23:12:09

你好
我也有同样的问题
(defun c:trewq ( / )
(eea-str_int_sort2 (list "DN1""DN10""DN11""DN12""DN13""DN14""DN15""DN16""DN17""DN2""DN3""DN4""DN5""DN6""DN7""DN8""DN9)t)
)
(VL-STRING-ELT A I)
;bad argument type <3> ; expected <INTEGER> at

但如果列表如下所示:
(eea-str_int_sort2 (list"DN1x""DN10""DN11""DN12""DN13""DN14""DN15""DN16""DN17""DN2""DN3""DN4""DN5""DN6""DN7""DN8""DN9")t )
没关系。
我做错什么了吗?。你在哪里工作。请帮忙。

irneb 发表于 2022-7-5 23:15:53

首先,你的列表不正确,它没有结束:。。。“DN9)…应该是…”DN9“。。。
 
其次,我认为你发现了Evgeniy代码的问题。如果我在他的代码上运行它:
但是使用Lee的文件端口2似乎是可行的:
Command: (_filesort2 (list "DN1""DN10""DN11""DN12""DN13""DN14""DN15""DN16""DN17""DN2""DN3""DN4""DN5""DN6""DN7""DN8""DN9") t)
("DN1" "DN2" "DN3" "DN4" "DN5" "DN6" "DN7" "DN8" "DN9" "DN10" "DN11" "DN12" "DN13" "DN14" "DN15" "DN16" "DN17")

jan_ek 发表于 2022-7-5 23:19:11

首先是我的错误。
第二,感谢您的快速回复。

Lee Mac 发表于 2022-7-5 23:21:23

这是我对Evgeniy函数的修改版本,它应该可以在您的示例中成功执行:

(defun eea-lm-str_int_sort ( l f )
   (mapcar (function (lambda ( a ) (nth a l)))
       (vl-sort-i (if f (mapcar 'strcase l) l)
         (function
               (lambda ( a b / i )
                   (setq i (vl-string-mismatch a b))
                   (cond
                     (   (zerop i)
                           (if (and (< 47 (ascii a) 58) (< 47 (ascii b) 58))
                              (< (atoi a) (atoi b))
                              (< a b)
                           )
                     )
                     (   (= i (strlen a)))
                     (   (= i (strlen b)) nil)
                     (   (and
                               (< 47 (vl-string-elt a i) 58)
                               (< 47 (vl-string-elt b i) 58)
                           )
                           (< (atoi (substr a (1+ i))) (atoi (substr b (1+ i))))
                     )
                     (   (< 47 (vl-string-elt a (1- i)) 58)
                           (< (atoi (substr a i)) (atoi (substr b i)))
                     )
                     (   (< a b))
                   )
                )
         )
       )
   )
)

我想对位置2列表排序

jan_ek 发表于 2022-7-5 23:24:06

类似这样:
_$ (eea-lm-str_int_sort '("DN1" "DN10" "DN11" "DN12" "DN13" "DN14" "DN15" "DN16" "DN17" "DN2" "DN3" "DN4" "DN5" "DN6" "DN7" "DN8" "DN9") t)
("DN1" "DN2" "DN3" "DN4" "DN5" "DN6" "DN7" "DN8" "DN9" "DN10" "DN11" "DN12" "DN13" "DN14" "DN15" "DN16" "DN17")
页: [1] 2
查看完整版本: [自动LIS]排序代码