您向我解释了为什么当PDF文件名长度设置与DWG文件名不同时,在我使用
(substr pdf\u name 1(-strlen pdf\u name)(strlen(getvar“dwgname”)))
我为这件事道歉。。我想得太多了。。。。。。。吸取的教训
“我们去你的房间!!!!!” 另一个问题是,文件名(甚至文件夹名)可能不止一个点。它们也可能根本没有任何扩展。
试试这些:
[列表]
[*](拆分路径“c:\\testpath/subfolder\\file.name.ext”)
[*](拆分路径“c:\\testpath/sub.folder\”)
[*](拆分路径“c:\\testpath/sub.folder\\filename”)
[/列表]
(substr pdf_name 1 (- (strlen pdf_name)
(+ (- (strlen pdf_name) (strlen (getvar "dwgprefix")))1 )))
这个怎么样 同样,这假设您尝试从中提取的路径与图形位于同一文件夹中。根据DWGNAME变量,这是一个类似的问题。 是的,我知道。。。。我应该呆在我的房间里
令人沮丧的是,我应该克制自己不回答问题,坚持只问问题。
Irneb,
标准函数(如我前面所列)应该正确处理这些情况-它们不在您的系统上吗? 你的函数引起了Irneb的兴趣,也许另一种编写方法是:
(defun LM:fnsplitl ( fn / sub )
(defun _sub ( s l / p )
(if (and l (setq p (vl-string-position (car l) s nil t)))
(cons (substr s 1 p) (_sub (substr s (+ 2 p)) (cdr l)))
(list s)
)
)
(_sub (vl-string-translate "/" "\\" fn) '(92 46))
)
或迭代版本:
7 不,当你尝试做某事时,你会学得更快。你的“好”之处在于,你正努力使它尽可能简单高效。不幸的是,它并不适用于所有场景。
我知道,只是为了那些不想要vla的东西,但仍然希望它能在所有可能性上发挥作用的人wink:编辑:我的代码也使用vl的东西,但这是可以改变的。。。
在几乎所有情况下,我都建议使用迭代版本而不是递归。虽然递归可以实现短n-sweet编码,但如果不完全正确,它也不是最有效的。
请参阅此帖子:http://devlicio.us/blogs/christopher_bennage/archive/2010/09/14/what-is-functional-programming-part-3-recursion.aspx
注意关于尾部调用优化的讨论。如果您的函数不这样做,Lisp解释器将进行大量的CPU调用和RAM寻址,只是为了逐步完成对同一函数的调用。我不确定AutoLisp是否像更现代的lisp编译器/解释器那样优化了这些调用。
页:
1
[2]