Lee Mac 发表于 2022-7-6 10:48:15

谢谢:)

be_bo 发表于 2022-7-6 10:50:09

谢谢李的代码,也谢谢你让我知道!
您向我解释了为什么当PDF文件名长度设置与DWG文件名不同时,在我使用
(substr pdf\u name 1(-strlen pdf\u name)(strlen(getvar“dwgname”)))

pBe 发表于 2022-7-6 10:52:01

 
我为这件事道歉。。我想得太多了。。。。。。。吸取的教训
 
“我们去你的房间!!!!!”

irneb 发表于 2022-7-6 10:55:57

另一个问题是,文件名(甚至文件夹名)可能不止一个点。它们也可能根本没有任何扩展。
试试这些:
 
[列表]
[*](拆分路径“c:\\testpath/subfolder\\file.name.ext”)
[*](拆分路径“c:\\testpath/sub.folder\”)
[*](拆分路径“c:\\testpath/sub.folder\\filename”)
[/列表]

pBe 发表于 2022-7-6 10:58:49


(substr pdf_name 1 (- (strlen pdf_name)
       (+ (- (strlen pdf_name) (strlen (getvar "dwgprefix")))1 )))

 
这个怎么样

irneb 发表于 2022-7-6 11:02:48

同样,这假设您尝试从中提取的路径与图形位于同一文件夹中。根据DWGNAME变量,这是一个类似的问题。

pBe 发表于 2022-7-6 11:05:15

是的,我知道。。。。我应该呆在我的房间里
 
令人沮丧的是,我应该克制自己不回答问题,坚持只问问题。

Lee Mac 发表于 2022-7-6 11:09:27

 
Irneb,
 
标准函数(如我前面所列)应该正确处理这些情况-它们不在您的系统上吗?

Lee Mac 发表于 2022-7-6 11:11:46

你的函数引起了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

irneb 发表于 2022-7-6 11:14:18

不,当你尝试做某事时,你会学得更快。你的“好”之处在于,你正努力使它尽可能简单高效。不幸的是,它并不适用于所有场景。 
我知道,只是为了那些不想要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]
查看完整版本: 从pa中减去文件名