找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 201|回复: 0

[字符串] XD::PATH:to-list

[复制链接]

已领礼包: 20个

财富等级: 恭喜发财

发表于 2025-4-17 15:55:31 | 显示全部楼层 |阅读模式
函数发布
函数名称: XD::PATH:TO-LIST
调用格式: (XD::PATH:to-list path)
参数说明: path - 字符串类型,表示一个或多个路径,路径之间使用分号 `;` 分隔。
返回值: 返回一个列表(List),包含处理后标准格式的路径字符串,每个路径都以 "\\\\" 结尾
函数简介: ;;; 【功能说明】
;;; 将一个由分号分隔的路径字符串转换为路径列表,格式统一。
;;; 主要功能包括:
;;; - 将路径中的正斜杠 (/) 替换为反斜杠 (\\)
;;; - 确保每个路径项都以 "\\" 结尾
;;; - 移除开头和结尾多余的分号;
;;; - 将当前图纸所在目录 (由 getvar "dwgprefix" 获取) 添加到列表开头(如果尚未包含)
;;;
;;; 【参数说明】
;;; A - 字符串类型,表示一个或多个路径,路径之间使用分号 `;` 分隔。
;;;
;;; 【返回值】
;;; 返回一个列表(List),包含处理后标准格式的路径字符串,每个路径都以 "\\\\" 结尾。
函数来源: 二次修改
函数作者: marting
适用版本: 不限 
最后更新时间: 2025-04-17
备注: -
演示图片: -

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

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

×
本帖最后由 marting 于 2025-4-17 19:06 编辑

  1. ;;; ------------------------------------------------------------------------
  2. ;;; 函数名称:XD::PATH:TO-LIST
  3. ;;;
  4. ;;; 【功能说明】
  5. ;;;     将一个由分号分隔的路径字符串转换为路径列表,格式统一。
  6. ;;;     主要功能包括:
  7. ;;;         - 将路径中的正斜杠 (/) 替换为反斜杠 (\)
  8. ;;;         - 确保每个路径项都以 "\" 结尾
  9. ;;;         - 移除开头和结尾多余的分号;
  10. ;;;         - 将当前图纸所在目录 (由 getvar "dwgprefix" 获取) 添加到列表开头(如果尚未包含)
  11. ;;;
  12. ;;; 【参数说明】
  13. ;;;     A - 字符串类型,表示一个或多个路径,路径之间使用分号 `;` 分隔。
  14. ;;;
  15. ;;; 【返回值】
  16. ;;;     返回一个列表(List),包含处理后标准格式的路径字符串,每个路径都以 "\\" 结尾。
  17. ;;;
  18. ;;; 【依赖函数】
  19. ;;;     - XSTRCASE:字符串大小写统一函数
  20. ;;;     - XD::STR:REPLACE:字符串替换函数
  21. ;;;     - XD::STR:TO-LIST:按分隔符分割字符串为列表
  22. ;;;
  23. ;;; 【使用示例】
  24. ;;;     假设当前图纸目录为 "D:\\Projects\\Current\\"
  25. ;;;     调用如下:
  26. ;;;         (XD::PATH:TO-LIST "C:/A;D:/B\\;E:/C")
  27. ;;;     返回结果:
  28. ;;;         ("D:\\Projects\\Current\\" "C:\\A\\" "D:\\B\\" "E:\\C\\")
  29. ;;;
  30. ;;; 【备注】
  31. ;;;     - 本函数常用于路径环境变量解析、自定义搜索路径整理等场景。
  32. ;;;     - 自动去重当前图纸路径,防止重复添加。
  33. ;;; ------------------------------------------------------------------------


  34. ;;; ------------------------------------------------------------------------
  35. ;;; 函数名称:XD::PATH:to-list
  36. ;;;
  37. ;;; 【功能说明】
  38. ;;;     将一个由分号分隔的路径字符串转换为路径列表,格式统一。
  39. ;;;     主要功能包括:
  40. ;;;         - 将路径中的正斜杠 (/) 替换为反斜杠 (\)
  41. ;;;         - 确保每个路径项都以 "\" 结尾
  42. ;;;         - 移除开头和结尾多余的分号;
  43. ;;;         - 将当前图纸所在目录 (由 getvar "dwgprefix" 获取) 添加到列表开头(如果尚未包含)
  44. ;;;
  45. ;;; 【参数说明】
  46. ;;;     a - 字符串类型,表示一个或多个路径,路径之间使用分号 `;` 分隔。
  47. ;;;
  48. ;;; 【返回值】
  49. ;;;     返回一个列表(list),包含处理后标准格式的路径字符串,每个路径都以 "\\" 结尾。
  50. ;;;
  51. ;;; 【依赖函数】
  52. ;;;     - xstrcase:字符串大小写统一函数
  53. ;;;     - XD::STR:replace:字符串替换函数
  54. ;;;     - XD::STR:to-list:按分隔符分割字符串为列表
  55. ;;;
  56. ;;; 【使用示例】
  57. ;;;     假设当前图纸目录为 "D:\\Projects\\Current\\"
  58. ;;;     调用如下:
  59. ;;;         (XD::PATH:to-list "C:/A;D:/B\\;E:/C")
  60. ;;;     返回结果:
  61. ;;;         ("D:\\Projects\\Current\\" "C:\\A\\" "D:\\B\\" "E:\\C\\")
  62. ;;;
  63. ;;; 【备注】
  64. ;;;     - 本函数常用于路径环境变量解析、自定义搜索路径整理等场景。
  65. ;;;     - 自动去重当前图纸路径,防止重复添加。
  66. ;;; ------------------------------------------------------------------------

  67. (defun XD::PATH:to-list (a / lst n)
  68.   (if a
  69.     (progn
  70.       (setq a (xstrcase a)) ; 统一大小写
  71.       (setq a (XD::STR:replace "/" "\\" a)) ; 替换斜杠

  72.       ;; 保证路径字符串前后带有分号
  73.       (if (not (equal ";" (substr a 1 1)))
  74.         (setq a (strcat ";" a))
  75.       )
  76.       (if (not (equal ";" (substr a (strlen a) 1)))
  77.         (setq a (strcat a ";"))
  78.       )

  79.       ;; 分割成列表
  80.       (setq lst (XD::STR:to-list ";" a))

  81.       ;; 去掉开头和结尾的空字符串
  82.       (if (equal (car lst) "")
  83.         (setq lst (cdr lst))
  84.       )
  85.       (if (equal (last lst) "")
  86.         (setq lst (reverse (cdr (reverse lst))))
  87.       )

  88.       ;; 确保每个路径以 "\" 结尾
  89.       (setq n 0)
  90.       (repeat (length lst)
  91.         (setq a (nth n lst))
  92.         (if (not (equal "\\" (substr a (strlen a) 1)))
  93.           (progn
  94.             (setq a (strcat a "\\"))
  95.             (setq lst (subst a (nth n lst) lst))
  96.           )
  97.         )
  98.         (setq n (+ n 1))
  99.       )

  100.       ;; 添加当前图纸路径
  101.       (setq a (getvar "dwgprefix"))
  102.       (setq a (xstrcase a))
  103.       (setq a (XD::STR:replace "/" "\\" a))
  104.       (if (not (member a lst))
  105.         (setq lst (append (list a) lst))
  106.       )
  107.     )
  108.   )
  109.   lst
  110. )


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

本版积分规则

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

GMT+8, 2025-9-7 06:27 , Processed in 0.236091 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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