乐筑天下

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

[编程交流] 简单的saveas-LISP

[复制链接]

13

主题

51

帖子

38

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-6 10:41:40 | 显示全部楼层 |阅读模式
大家好,
 
需要帮助解决一个非常简单的问题。。。我已经有一段时间没有处理LISP了,所以我很生疏。。。我正在尝试创建一个简单的保存到文件路径的例程。。。用户只需提供文件名,lisp将其保存到预定义的路径。。。。现在。。。我记得有一些处理文件路径名的技巧,但我记不起它是什么。。。我试过反斜杠、正斜杠和双正斜杠,但似乎都不管用。。。
 
我哪里做错了?
 
  1. (defun c:ssave ()
  2. (setvar "cmdecho" 0)
  3. (setvar "filedia" 0)
  4. (command "saveas" "2010" ("\\hdnt10\grp_eng\Group\2D AutoCAD\HDAL Library")
  5.   
  6. )
  7. (setvar "filedia" 1)
  8. (setvar "cmdecho" 1)
  9. (princ
  10. )

 
干杯
回复

使用道具 举报

0

主题

6

帖子

6

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 10:49:41 | 显示全部楼层
也许是这样的
 
  1. (defun c:ssave (/ FileName)
  2. (setvar "cmdecho" 0)
  3. (setvar "filedia" 0)
  4. (setq FileName (getstring 1 "\nType Filename: "))
  5. (command "SAVEAS" "2010" (strcat  "C:\\hdnt10\\grp_eng\\Group\\2D AutoCAD\HDAL Library\" FileName))          
  6. (setvar "filedia" 1)
  7. (setvar "cmdecho" 1)
  8. (princ)
  9. )
回复

使用道具 举报

13

主题

51

帖子

38

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-6 10:51:56 | 显示全部楼层
我看到你在那里做了什么,我记得以前使用strcat函数。。。
 
我对您的代码进行了一些修改,因为保存位置不在C:\驱动器上,它实际上位于网络位置“\\hdnt10”,我假设我仍然假设对这一位进行双斜杠?所以它变成了“hdnt10”?当我使用检查代码下面的代码时,请给出错误“错误:输入时列表格式错误”
 
其他一切看起来都很好,谢谢你的帮助
 
  1. (defun c:ssave (/ FileName)
  2. (setvar "cmdecho" 0)
  3. (setvar "filedia" 0)
  4. (setq FileName (getstring 1 "\nType Filename: "))
  5. (command "SAVEAS" "2010" (strcat  "\\\\hdnt10\\grp_eng\\Group\\2D AutoCAD\\HDAL Library\" FileName))          
  6. (setvar "filedia" 1)
  7. (setvar "cmdecho" 1)
  8. (princ)

 
当做
回复

使用道具 举报

0

主题

6

帖子

6

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 10:57:47 | 显示全部楼层
我想你会用你想保存到的驱动器替换C:。我能想到的唯一让你走上正确道路的方法是:
打开已保存到要保存到的位置的图形,并在命令行中键入DWGPREFIX。你应该知道路
 
lisp读它的方式。在例行程序中使用它来替换,不要忘记将斜线加倍。如果这不起作用,这里有很多人比我有更高的技能,希望他们能来帮助我。
 
附言:我不知道你能不能用四个斜杠。我也在网络上工作,每个位置都有一个驱动器。用它代替C:
回复

使用道具 举报

13

主题

51

帖子

38

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-6 11:05:06 | 显示全部楼层
可以
 
我按照您的建议做了,删除了对网络位置的引用,并使用了映射的驱动器位置,因此代码如下所示:
 
  1. (defun c:ssave (/ FileName)
  2. (setvar "cmdecho" 0)
  3. (setvar "filedia" 0)
  4. (setq FileName (getstring 1 "\nEnter Filename for Save: "))
  5. (command "SAVEAS" "2010" (strcat  "G:\\Group\\2D AutoCAD\\HDAL Library" FileName))          
  6. (setvar "filedia" 1)
  7. (setvar "cmdecho" 1)
  8. (princ)
  9. )

 
现在,我已经试着将同样的东西应用到OPEN命令中,我认为这会很好而且简单。。。但我不能让它工作。。。
 
  1. (defun c:oopen (/ FileName)
  2. (setvar "cmdecho" 0)
  3. (setvar "filedia" 0)
  4. (setq FileName (getstring 1 "\nEnter Filename to Open: "))
  5. (command "OPEN" (strcat  "G:\\Group\\2D AutoCAD\\HDAL Library\" FileName))          
  6. (setvar "filedia" 1)
  7. (setvar "cmdecho" 1)
  8. (princ)
  9. )

 
出于某种原因,当它到达open命令时,它会在同一个步骤中退出,因此当它解析目录和文件名时,它会将其视为一个单独的命令,因此我得到消息:
 
  1. Command: G:\Group\2D AutoCAD\HDAL Library\a100218-01.dwg Unknown command
  2. "G:\GROUP\2D AUTOCAD\HDAL LIBRARY\A100218-01.DWG".  Press F1 for help.

 
有什么建议吗?
回复

使用道具 举报

0

主题

6

帖子

6

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 11:10:27 | 显示全部楼层
以下是我在AUGI论坛上通过T.Willey的网络搜索找到的一些东西:
 
不能在lisp中使用open命令打开绘图。您必须将文件添加到autocad的文档对象中,然后按这种方式操作。
  1. (defun MyOpen (FileName ReadOnly / )
  2. ; If readonly is not nil, then it will open the file as read-only.
  3. (vl-load-com)
  4. (vla-Open
  5. (vla-get-Documents
  6. (vlax-get-Acad-Object)
  7. )
  8. FileName
  9. (if ReadOnly
  10. :vlax-true
  11. :vlax-false
  12. )
  13. )
  14. )

 
这可能会让你走上正确的道路。我必须自己解决。如果我愿意,我会和你分享。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:13:40 | 显示全部楼层
也许是这样的:
 
  1. (defun c:ssave ( / *error* vars old s )
  2. (defun *error* ( msg )
  3.    (and old (mapcar 'setvar vars old))
  4.    (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
  5.        (princ (strcat "\n** Error: " msg " **")))
  6.    (princ)
  7. )
  8. (setq vars '("CMDECHO" "FILEDIA") old (mapcar 'getvar vars))
  9. (mapcar 'setvar vars '(0 0))
  10. (while
  11.    (progn
  12.      (setq s (getstring (strcat "\nEnter Filename for Save <" (getvar 'DWGNAME) "> : ")))
  13.      (cond ( (eq "" s)
  14.              (setq s (getvar 'DWGNAME)) nil)
  15.            ( (not (snvalid s))
  16.              (princ "\n** Invalid **")))
  17.    )
  18. )
  19. (command "_.saveas" "_2010" (strcat "G:\\Group\\2D AutoCAD\\HDAL Library\" s))
  20. (mapcar 'setvar vars old)
  21. (princ)
  22. )

 

 
  1. (defun c:ssave2 ( / s )
  2. (vl-load-coM)
  3. (while
  4.    (progn
  5.      (setq s (getstring (strcat "\nEnter Filename for Save <" (getvar 'DWGNAME) "> : ")))
  6.      (cond ( (eq "" s)
  7.              (setq s (getvar 'DWGNAME)) nil)
  8.       
  9.            ( (not (snvalid s))
  10.              (princ "\n** Invalid **")))
  11.    )
  12. )
  13. (vla-saveas
  14.    (vla-get-ActiveDocument
  15.      (vlax-get-acad-object)
  16.    )
  17.    (strcat "G:\\Group\\2D AutoCAD\\HDAL Library\" s)
  18. )
  19. (princ)
  20. )

 
对于open:
 
  1. (defun c:oopen ( / s )
  2. (vl-load-com)
  3. (while
  4.    (or
  5.      (eq ""
  6.        (setq s
  7.          (getstring "\nEnter Filename to Open: ")
  8.        )
  9.      )
  10.      (not (snvalid s))
  11.    )
  12.    (princ "\n** Invalid **")
  13. )
  14. (vla-open
  15.    (vla-get-Documents
  16.      (vlax-get-acad-object)
  17.    )
  18.    (strcat "G:\\Group\\2D AutoCAD\\HDAL Library\" s) :vlax-false
  19. )
  20. (princ)
  21. )
回复

使用道具 举报

13

主题

51

帖子

38

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-6 11:19:08 | 显示全部楼层
该死的!我相信上次我玩LISP的时候没那么难。。。我会试着改变主意,明天在工作中试试看。谢谢你的建议。
回复

使用道具 举报

48

主题

1073

帖子

1043

银币

后起之秀

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

铜币
238
发表于 2022-7-6 11:22:21 | 显示全部楼层
这对我有用。。。
 
  1. (defun c:oopen (/ FileName)
  2. (setvar "cmdecho" 0)
  3. (setvar "filedia" 0)
  4. (setq FileName (getstring 1 "\nEnter Filename to Open: "))
  5. [b] (setq myFile (strcat "P:\\Design_Office\\E106\\E106-11\" FileName))[/b]
  6. [b] (command "OPEN" myFile)[/b]
  7. (setvar "filedia" 1)
  8. (setvar "cmdecho" 1)
  9. (princ)
  10. )

 
当然,如果文件不存在,就会出错,但你可以把它整理出来。
回复

使用道具 举报

0

主题

6

帖子

6

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 11:28:59 | 显示全部楼层
 
X2。。。彼此彼此。我单独理解功能。说到嵌套,在什么情况下使用什么函数,以及如何让它们一起工作,这些都让我感到困惑。但至少你的请求写得很清楚。我希望有人会来对我说“让他们轻松起来”。。。谢谢李。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 16:57 , Processed in 0.596715 second(s), 72 queries .

© 2020-2025 乐筑天下

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