乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 12|回复: 12

[编程交流] 如何检查文件是否已加载

[复制链接]

59

主题

327

帖子

268

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
295
发表于 2022-7-6 11:37:38 | 显示全部楼层 |阅读模式
嘿伙计们,
 
我一直在坚持这一点,尽管我相信这并没有那么复杂。。。我想制作一个宏,它执行以下操作:
 
1.检查是否加载了lisp文件(以便自定义创建的函数可用)
 
2.如果未加载,则检查文件本身是否存在(lisp文件在特定地图或支持文件路径之一中)
 
3、如果它在那里,则装载物品
 
4.如果不存在,则对问题发出警报,不管怎样,并停止命令。
 
5.如果lisp文件确实存在并已加载,则在lisp中执行命令。
 
这将是一个测试。lsp(仅举一个例子):
 
  1. [color=black](defun c:ttt()[/color]
  2. [color=black] (setq pt1 (getpoint "Point 1:")[/color]
  3. [color=black]pt2 (getpoint "Point 2:")[/color]
  4. [color=black] )[/color]
  5. [color=black] (command "line" pt1 pt2 "")[/color]
  6. [color=black] (princ)[/color]
  7. [color=black])[/color]
  8. [color=black](princ)[/color]

 
这是我目前为止的宏:
  1. [color=black]^C^C^P(if (and (findfile (strcat (getenv "programfiles") "[/color][url="file://\\MyMap\\Program\\test.lsp"))(not(c:ttt)))(load"][color=black]\\MyMap\\Program\\test.lsp"))(not(c:ttt)))(load[/color][/url][color=black] (strcat (getenv[u] "programfiles") "[/u][/color][url="file://\\MyMap\\program\\test.lsp"))(alert"][color=black]\\MyMap\\program\\test.lsp"))(alert[/color][/url][color=black] "Not found"))ttt;[/color]

 
我知道它不是所有对应的(lisp和宏),但我没有想出更好的。。。特别是“检查是否已准备好加载”部分。。。我完全不确定(不是(c:ttt))。
 
我们非常感谢您的帮助。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 11:43:37 | 显示全部楼层
如果将Lisp文件夹路径添加到支持路径(在选项中),您将省去很多麻烦。这也是最好的政策。
 
你所拥有的是你能做的最好的。一般来说,如果我有这样的东西,我会称之为:
 
  1. (or c:TTT (load "test.lsp" nil))

 
 
此外,为了消除任何出错的机会,您应该始终填写加载子例程的第二个变量要求。如果找不到文件,则显示nil或“String”消息。如果什么都没有,如果找不到,就会出错。
 
例子:
 
  1. Command: (load "blah.lsp")
  2. Error: LOAD failed: "blah.lsp"
  3. Command: (load "blah.lsp" nil)
  4. nil
  5. Command: (load "blah.lsp" "Cannot find blah.lsp")
  6. "Cannot find blah.lsp"
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:47:43 | 显示全部楼层
您也可以使用以下工具进行检查:
 
  1. (vl-symbol-value 'c:ttt)
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 11:54:46 | 显示全部楼层
哦,是的,我忘了提,只是检查一下,这就是你使用的。
 
  1. (and c:ttt)
回复

使用道具 举报

59

主题

327

帖子

268

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
295
发表于 2022-7-6 12:02:34 | 显示全部楼层
Alanjt,
 
如果我离开“getenv”部分,将lisp文件夹添加到支持文件路径,这将使该部分变得更容易,这是真的。
 
假设我已经添加了文件夹,但我不想将lisp放在startupsuite中,也不想在acaddoc中添加什么。lsp。
 
然后我仍然需要一个宏来完成我需要的:查看函数是否已加载,如果已加载,则执行命令。如果未加载,则加载。如果文件不存在,则发出错误警报。
 
这样,AutoCad在启动图形时不必加载所有lisp文件。我认为这有助于减少开业所需的时间。
 
现在这个宏可以工作了,但如果文件未加载且找不到,它仍会尝试执行(警报“命令”)。这不应该发生。
 
(没有^C^C^P和ttt;这必须在宏中出现)
  1. (if
  2.    (not c:ttt)
  3.    (if
  4.      (findfile "test.lsp")
  5.      (load "test.lsp")
  6.      (alert "Error: file not found")
  7.      )
  8.    )
  9. (alert"command")

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

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 12:04:09 | 显示全部楼层
只是出于好奇,你试过自动加载吗?
 
例子:
  1. (autoload "test.lsp" '("tt" "test"))

 
当输入tt或test时,这将执行例程的按需加载。
 
如果这不合适,那么我们将继续你想要的。
回复

使用道具 举报

13

主题

126

帖子

114

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

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

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:17:21 | 显示全部楼层
正确,它永远不会返回零。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 12:18:43 | 显示全部楼层
 
 
你会得到非零回报,但我不知道你为什么会想要你正在做的事情。你打算在启动时对几个文件执行此操作吗?
 
  1. 9
回复

使用道具 举报

59

主题

327

帖子

268

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
295
发表于 2022-7-6 12:23:52 | 显示全部楼层
 
谢谢你的回复,但我现在在家。。。明天需要试试。我相信通往目的地的路总是很多的。至于自动加载:不,我没有试过。我是哑巴吗?
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-6 02:26 , Processed in 0.373871 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表