LISP搜索例程
我有一个Acad r14的现有LISP例程,我正试图将其转换为Acad 2008,但我不知道我在做什么。它要求提供图纸编号,然后查看不同文件位置的文本数据库(path2.txt)。一旦它在其中一个位置找到文件,就会打开它。非常简单,但open命令的工作方式似乎与r14不同。该例程似乎工作正常,直到它实际到达open命令,然后停止。任何帮助都将不胜感激。谢谢,马克(defun C:find1test()
(setq a“”)
(setq b“”)
(setq测试“”)
(setq dwg“”)
(setq f“”)
(setq dwg(getstring T“\n输入图纸名称:”);暂停用户响应
(命令“pan”“0,0”“0.001”)
(setq ext“.dwg”)
(setq c(strcat“l:/users/none/”dwg ext))
(setq f(打开“l:/apps/acad/path2.txt”“r”);打开要读取的文本文件。
(while(/=T检验);循环直到无响应。
(setq a(读取行f));读取打开的文本文件的第一行。
(setq b(strcat a dwg ext))
(setq测试(或(findfile b)))
(如果(=b c)
(程序
(setq tt1(strcat“DRAWING\”“dwg”\“NOT FOUND!!”)
(警报tt1)
(退出)
)
)
)
(关闭f);关闭打开的文本文件。
(setq y(getstring“\n您想保存更改吗?是或否”))
(如果
(或
(=y“y”)
(=y“y”)(命令“qsave”“open”b)(命令“open”“y”b)) 也许是这样?
(defun C:find1test(/ GetPaths dwg file)
(vl-load-com)
(defun GetPaths (fname / file line lst)
(cond ((not (and (setq fname (findfile fname))
(setq file(open fname "r")))))
((while (setq line (read-line file))
(setq lst (cons line lst)))
(close file)))
(reverse lst))
(setq *doc (cond (*doc) ((vla-get-ActiveDocument (vlax-get-acad-object)))))
(if (not (zerop (strlen (setq dwg (getstring t "\nEnter Drawing Name: ")))))
(if (setq file (vl-some
(function
(lambda (x) (findfile (strcat x dwg ".dwg"))))
(GetPaths "l:/apps/acad/path2.txt")))
(progn
(initget "Yes No")
(if (/= "No" (getkword "\nSave Changes? <Yes> : "))
(if (eq "" (vla-get-fullname *doc))
(vla-saveas *doc (strcat (vla-get-Path *doc) (vla-get-Name *doc)))
(vla-save *doc)))
(vla-Activate
(vla-open
(if (zerop (getvar 'SDI))
(vla-get-Documents (vlax-get-acad-object)) *doc) file :vlax-false)))
(princ "\n** Drawing not Found **")))
(princ))
非常感谢你为我改写这篇文章。我用现有的例程替换了它,但我得到了相同的结果。它似乎从正确的目录中获取图形编号,但它将文件名和位置用作命令,而不是打开文件。下面是命令窗口中的序列:(我重命名了例程find-2008.lsp)
命令:find-2008
正在初始化。。。
输入图形名称:0809635
保存更改?:
_.打开
命令:L:\drawings\part-0809\0809635。dwg未知命令
“L:\DRAWINGS\PART-0809\0809635.DWG”。按F1键获取帮助。
命令:
关于如何纠正这个问题,有什么想法吗? 信不信由你,我从来没有以这种方式使用过Open,所以这对我来说是一个新的领域,但也就是说,我已经更新了上面的代码,你能试试吗。
如果不行,我还有一个主意 与第一个结果相同。非常奇怪。但我真的很感谢你的帮助。它只是不知道使用文件名作为打开的对象。尽管如此,它正在正确的目录中查找图形-因此很多工作正在进行。 很高兴知道找到文件没问题
代码再次更新-使用不同的打开方法。 嘿!它起作用了!非常感谢你。我想我们今天都学到了一些东西。嗯,你学到了一些东西。在我完全理解你的代码之前,我必须仔细研究你的代码。我对LISP很陌生,只有很少的VBA经验。
一定要把这个放在你的工具栏上。不用在网络上到处寻找图形是件好事——你永远不知道别人是否将图形保存在了错误的位置。
再次感谢,
做记号 好的,一个小故障。如果打开了多个图形,则不会使最新打开的图形成为当前图形。它打开文件,然后恢复到上一个图形。有没有办法打开它并使其成为活动文件? 代码再次更新-希望这会成为最新的
恐怕我只是一个程序员——我不需要我创建的任何代码我只是喜欢编码 就是这样。再次感谢。只要我需要帮助,我一定会回到这个网站。
页:
[1]
2