MarcoW 发表于 2022-7-6 11:37:38

如何检查文件是否已加载

嘿伙计们,
 
我一直在坚持这一点,尽管我相信这并没有那么复杂。。。我想制作一个宏,它执行以下操作:
 
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))。
 
我们非常感谢您的帮助。

alanjt 发表于 2022-7-6 11:43:37

如果将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"

Lee Mac 发表于 2022-7-6 11:47:43

您也可以使用以下工具进行检查:
 

(vl-symbol-value 'c:ttt)

alanjt 发表于 2022-7-6 11:54:46

哦,是的,我忘了提,只是检查一下,这就是你使用的。
 
(and c:ttt)

MarcoW 发表于 2022-7-6 12:02:34

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")


 
我找不到解决办法,这让我很烦恼。你们有人吗?

alanjt 发表于 2022-7-6 12:04:09

只是出于好奇,你试过自动加载吗?
 
例子:
(autoload "test.lsp" '("tt" "test"))
 
当输入tt或test时,这将执行例程的按需加载。
 
如果这不合适,那么我们将继续你想要的。

Glen Smith 发表于 2022-7-6 12:11:00

 
 
谢谢你发这个帖子,我一直在修改阿卡多克。我从这里复制的lsp文件,不知道为什么它是这样写的。但我还是很困惑。
 
我拥有的文件用于:
但是如果我理解正确,if永远不会返回NIL,因为如果加载失败,加载将返回一个字符串。我做错了什么?
 
格伦

Lee Mac 发表于 2022-7-6 12:17:21

正确,它永远不会返回零。

alanjt 发表于 2022-7-6 12:18:43

 
 
你会得到非零回报,但我不知道你为什么会想要你正在做的事情。你打算在启动时对几个文件执行此操作吗?
 
9

MarcoW 发表于 2022-7-6 12:23:52

 
谢谢你的回复,但我现在在家。。。明天需要试试。我相信通往目的地的路总是很多的。至于自动加载:不,我没有试过。我是哑巴吗?
页: [1] 2
查看完整版本: 如何检查文件是否已加载