Zakwaan 发表于 2022-7-5 19:42:01

将根部从直接

新手问题
 
我需要从目录路径中去掉主根。
 
 
 
我使用它来获取路径:
(setq dfil(GetField“目录列表”“”“dwg”2))
(setq文件路径(vl文件名目录dfil))
 
返回例如:“C:\\Blocks\\2dlib\\Cars\\Plan”
 
如何将上述结果转化为:“2dlib\Cars\Plan”
 
去掉“C:\\Blocks\”并且目录之间只有一个反斜杠?
 
 
“C:\\Blocks\\2dlib\\Trees\\Plan”>“2dlib\Trees\Plan”
“C:\\Blocks\\2dlib\\People”>“2dlib\\People”
 
 
非常感谢
扎克旺

Lee Mac 发表于 2022-7-5 20:00:51

首先,请注意,反斜杠字符是AutoLISP中的转义字符。这意味着使用单个反斜杠为其后的字符赋予另一种含义,例如:
 
\n=新行字符
\t=制表符
\“=双引号字符

 
因此,为了获得单个反斜杠,必须用另一个反斜杠作为反斜杠的前缀,以便将其标记为文字反斜杠而不是转义字符(实际上,您将第一个反斜杠用作转义字符,以赋予第二个反斜杠另一种含义)。
 
因此,在AutoLISP中,两个反斜杠代表一个反斜杠;观察:
_$ (princ "\nThis is a single backslash \\")
This is a single backslash \

Lee Mac 发表于 2022-7-5 20:06:34

关于剥离文件夹,请考虑以下递归函数:
(defun stripfolder ( dir lvl / pos )
   (if (and (< 0 lvl) (setq pos (vl-string-position 92 dir)))
       (stripfolder (substr dir (+ 2 pos)) (1- lvl))
       dir
   )
)

 
举几个例子:
_$ (stripfolder "C:\\Blocks\\2dlib\\Trees\\Plan" 2)
"2dlib\\Trees\\Plan"
_$ (stripfolder "C:\\Blocks\\2dlib\\People" 2)
"2dlib\\People"
_$ (stripfolder "C:\\Blocks\\2dlib\\Trees\\Plan" 1)
"Blocks\\2dlib\\Trees\\Plan"
_$ (stripfolder "C:\\Blocks\\2dlib\\Trees\\Plan" 3)
"Trees\\Plan"

Zakwaan 发表于 2022-7-5 20:20:35

谢谢Mac先生!
很有魅力!

Lee Mac 发表于 2022-7-5 20:33:54

不客气-我希望解释清楚!

Zakwaan 发表于 2022-7-5 20:47:09

是的,谢谢你,麦克先生。
页: [1]
查看完整版本: 将根部从直接