如何检查文件是否已加载
嘿伙计们,我一直在坚持这一点,尽管我相信这并没有那么复杂。。。我想制作一个宏,它执行以下操作:
1.检查是否加载了lisp文件(以便自定义创建的函数可用)
2.如果未加载,则检查文件本身是否存在(lisp文件在特定地图或支持文件路径之一中)
3、如果它在那里,则装载物品
4.如果不存在,则对问题发出警报,不管怎样,并停止命令。
5.如果lisp文件确实存在并已加载,则在lisp中执行命令。
这将是一个测试。lsp(仅举一个例子):
(defun c:ttt()
(setq pt1 (getpoint "Point 1:")
pt2 (getpoint "Point 2:")
)
(command "line" pt1 pt2 "")
(princ)
)
(princ)
这是我目前为止的宏:
^C^C^P(if (and (findfile (strcat (getenv "programfiles") "\\MyMap\\Program\\test.lsp"))(not(c:ttt)))(load (strcat (getenv "programfiles") "\\MyMap\\program\\test.lsp"))(alert "Not found"))ttt;
我知道它不是所有对应的(lisp和宏),但我没有想出更好的。。。特别是“检查是否已准备好加载”部分。。。我完全不确定(不是(c:ttt))。
我们非常感谢您的帮助。 如果将Lisp文件夹路径添加到支持路径(在选项中),您将省去很多麻烦。这也是最好的政策。
你所拥有的是你能做的最好的。一般来说,如果我有这样的东西,我会称之为:
(or c:TTT (load "test.lsp" nil))
此外,为了消除任何出错的机会,您应该始终填写加载子例程的第二个变量要求。如果找不到文件,则显示nil或“String”消息。如果什么都没有,如果找不到,就会出错。
例子:
Command: (load "blah.lsp")
Error: LOAD failed: "blah.lsp"
Command: (load "blah.lsp" nil)
nil
Command: (load "blah.lsp" "Cannot find blah.lsp")
"Cannot find blah.lsp" 您也可以使用以下工具进行检查:
(vl-symbol-value 'c:ttt)
哦,是的,我忘了提,只是检查一下,这就是你使用的。
(and c:ttt) Alanjt,
如果我离开“getenv”部分,将lisp文件夹添加到支持文件路径,这将使该部分变得更容易,这是真的。
假设我已经添加了文件夹,但我不想将lisp放在startupsuite中,也不想在acaddoc中添加什么。lsp。
然后我仍然需要一个宏来完成我需要的:查看函数是否已加载,如果已加载,则执行命令。如果未加载,则加载。如果文件不存在,则发出错误警报。
这样,AutoCad在启动图形时不必加载所有lisp文件。我认为这有助于减少开业所需的时间。
现在这个宏可以工作了,但如果文件未加载且找不到,它仍会尝试执行(警报“命令”)。这不应该发生。
(没有^C^C^P和ttt;这必须在宏中出现)
(if
(not c:ttt)
(if
(findfile "test.lsp")
(load "test.lsp")
(alert "Error: file not found")
)
)
(alert"command")
我找不到解决办法,这让我很烦恼。你们有人吗? 只是出于好奇,你试过自动加载吗?
例子:
(autoload "test.lsp" '("tt" "test"))
当输入tt或test时,这将执行例程的按需加载。
如果这不合适,那么我们将继续你想要的。
谢谢你发这个帖子,我一直在修改阿卡多克。我从这里复制的lsp文件,不知道为什么它是这样写的。但我还是很困惑。
我拥有的文件用于:
但是如果我理解正确,if永远不会返回NIL,因为如果加载失败,加载将返回一个字符串。我做错了什么?
格伦 正确,它永远不会返回零。
你会得到非零回报,但我不知道你为什么会想要你正在做的事情。你打算在启动时对几个文件执行此操作吗?
9
谢谢你的回复,但我现在在家。。。明天需要试试。我相信通往目的地的路总是很多的。至于自动加载:不,我没有试过。我是哑巴吗?
页:
[1]
2