找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 804|回复: 5

[每日一码] 字符表排序 A-1 A-2.. A-11

[复制链接]

已领礼包: 488个

财富等级: 日进斗金

发表于 2017-12-21 14:51:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
;命令: (sort_name  '("A-1""B-9""A-11""A-5""Floor11""CAD""B-2""Floor2""CAB" "2" "11" "4" "Floor1"))
-----> ("2" "4" "11" "A-1" "A-5" "A-11" "B-2" "B-9" "CAB" "CAD" "Floor1" "Floor2" "Floor11")


  1. ;By Aeo @xdcad.net
  2. (defun sort_name(lst / num1 num2 numexp pre1 pre2 prenumexp str1 str2)
  3.         (setq preNumExp "^[^0-9]*"
  4.                   numExp "[0-9]*"
  5.         )
  6.         (vl-sort lst
  7.                 '(lambda(str1 str2 / num1 num2 pre1 pre2)
  8.                     (setq pre1 (car(xd::string:regexpS  preNumExp str1 "img"))
  9.                               pre2 (car(xd::string:regexpS  preNumExp str2 "img"))
  10.                               num1 (car(xd::string:regexpS  numExp str1 "img"))
  11.                               num2 (car(xd::string:regexpS  numExp str2 "img"))
  12.                     )
  13.                     (if(and (= pre1 pre2) num1 num2)
  14.                             (< (atoi num1) (atoi num2))
  15.                             (< str1 str2)
  16.                     )
  17.                 )
  18.         )
  19. )

评分

参与人数 1D豆 +5 收起 理由
Lisphk + 5 好主题奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 488个

财富等级: 日进斗金

 楼主| 发表于 2017-12-21 15:04:08 | 显示全部楼层
布局按名称排序

  1. (defun sort_layouts (/ lst pos lay)   
  2.     (setq lst(sort_name(layoutlist) ))
  3.     (vlax-for lay
  4.         (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object)))
  5.         (if (setq pos (vl-position (vla-get-name lay) lst))
  6.             (vla-put-taborder lay (1+ pos))
  7.         )
  8.     )
  9. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2017-12-21 15:52:20 | 显示全部楼层
真给力,版主。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2017-12-21 15:57:23 | 显示全部楼层
我这执行怎么不对呢

命令: (sort_name  '("A-1""B-9""A-11""A-5""Floor11""CAD""B-2""Floor2""CAB" "2"
"11" "4" "Floor1"))

("2" "4" "11" "A-1" "A-11" "A-5" "B-9" "B-2" "CAB" "CAD" "Floor11" "Floor2"
"Floor1")


另外,版主,分割号能不能定义个参数,比如 -  # 等等都给分割。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 24个

财富等级: 恭喜发财

发表于 2017-12-21 19:50:03 | 显示全部楼层
本帖最后由 fools 于 2017-12-21 20:12 编辑

很好的主题,拆分数字和非数字可以考虑用  “\\d+|\\D+”
(xd::string:regexps "\\d+|\\D+" "1a高-1b-璟-c11弃-1" "") -->("1" "a高-" "1" "b-璟-c" "11" "弃-" "1")
属于比较特殊的拆分方式,用于文件名,目录名,布局名等排序的前置处理,忽略了小数点,正负号,科学计数法的影响
(LM:getfiles:sortlist '("A-1""B-9""A-11""A-5""Floor11""CAD""B-2""Floor2""CAB" "2" "11" "4" "Floor1"))("2" "4" "11" "A-1" "A-5" "A-11" "B-2" "B-9" "CAB" "CAD" "Floor1" "Floor2" "Floor11")

  1. ;;摘录自[url]http://www.lee-mac.com/lisp/html/GetFilesV1-6.html[/url]
  2. ;;文件名排序函数(Lee Mac)
  3. (defun LM:getfiles:sortlist (lst)
  4.   (mapcar (function (lambda (n) (nth n lst)))
  5.           (vl-sort-i (mapcar 'splitstringbynumber lst)
  6.                      (function (lambda (a b / x y)
  7.                                  (while        (and (setq x (car a)) (setq y (car b)) (= x y))
  8.                                    (setq a (cdr a)
  9.                                          b (cdr b)
  10.                                    )
  11.                                  )
  12.                                  (cond ((null x) b)
  13.                                        ((null y) nil)
  14.                                        ((and (numberp x) (numberp y)) (< x y))
  15.                                        ((numberp x))
  16.                                        ((numberp y) nil)
  17.                                        ((< x y))
  18.                                  )
  19.                                )
  20.                      )
  21.           )
  22.   )
  23. )
  24. ;;拆分数字和非数字(忽略正负号及小数点)
  25. (defun splitstringbynumber (str)
  26.   (mapcar '(lambda (x / y)
  27.              (if (setq y (distof x))
  28.                y
  29.                x
  30.              )
  31.            )
  32.           (xd::string:regexps "\\d+|\\D+" str "")
  33.   )
  34. )


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6468个

财富等级: 富甲天下

发表于 2017-12-22 00:02:01 | 显示全部楼层
不错的函数。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-23 22:42 , Processed in 0.365484 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表