Hickoz_bro 发表于 2022-7-6 10:41:40

简单的saveas-LISP

大家好,
 
需要帮助解决一个非常简单的问题。。。我已经有一段时间没有处理LISP了,所以我很生疏。。。我正在尝试创建一个简单的保存到文件路径的例程。。。用户只需提供文件名,lisp将其保存到预定义的路径。。。。现在。。。我记得有一些处理文件路径名的技巧,但我记不起它是什么。。。我试过反斜杠、正斜杠和双正斜杠,但似乎都不管用。。。
 
我哪里做错了?
 
(defun c:ssave ()
(setvar "cmdecho" 0)
(setvar "filedia" 0)
(command "saveas" "2010" ("\\hdnt10\grp_eng\Group\2D AutoCAD\HDAL Library\")

)
(setvar "filedia" 1)
(setvar "cmdecho" 1)
(princ
)
 
干杯

ziko 发表于 2022-7-6 10:49:41

也许是这样的
 
(defun c:ssave (/ FileName)
(setvar "cmdecho" 0)
(setvar "filedia" 0)
(setq FileName (getstring 1 "\nType Filename: "))
(command "SAVEAS" "2010" (strcat"C:\\hdnt10\\grp_eng\\Group\\2D AutoCAD\HDAL Library\\" FileName))          
(setvar "filedia" 1)
(setvar "cmdecho" 1)
(princ)
)

Hickoz_bro 发表于 2022-7-6 10:51:56

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

ziko 发表于 2022-7-6 10:57:47

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

Hickoz_bro 发表于 2022-7-6 11:05:06

可以
 
我按照您的建议做了,删除了对网络位置的引用,并使用了映射的驱动器位置,因此代码如下所示:
 
(defun c:ssave (/ FileName)
(setvar "cmdecho" 0)
(setvar "filedia" 0)
(setq FileName (getstring 1 "\nEnter Filename for Save: "))
(command "SAVEAS" "2010" (strcat"G:\\Group\\2D AutoCAD\\HDAL Library" FileName))          
(setvar "filedia" 1)
(setvar "cmdecho" 1)
(princ)
)
 
现在,我已经试着将同样的东西应用到OPEN命令中,我认为这会很好而且简单。。。但我不能让它工作。。。
 
(defun c:oopen (/ FileName)
(setvar "cmdecho" 0)
(setvar "filedia" 0)
(setq FileName (getstring 1 "\nEnter Filename to Open: "))
(command "OPEN" (strcat"G:\\Group\\2D AutoCAD\\HDAL Library\\" FileName))          
(setvar "filedia" 1)
(setvar "cmdecho" 1)
(princ)
)
 
出于某种原因,当它到达open命令时,它会在同一个步骤中退出,因此当它解析目录和文件名时,它会将其视为一个单独的命令,因此我得到消息:
 
Command: G:\Group\2D AutoCAD\HDAL Library\a100218-01.dwg Unknown command
"G:\GROUP\2D AUTOCAD\HDAL LIBRARY\A100218-01.DWG".Press F1 for help.
 
有什么建议吗?

ziko 发表于 2022-7-6 11:10:27

以下是我在AUGI论坛上通过T.Willey的网络搜索找到的一些东西:
 
不能在lisp中使用open命令打开绘图。您必须将文件添加到autocad的文档对象中,然后按这种方式操作。
(defun MyOpen (FileName ReadOnly / )
; If readonly is not nil, then it will open the file as read-only.

(vl-load-com)
(vla-Open
(vla-get-Documents
(vlax-get-Acad-Object)
)
FileName
(if ReadOnly
:vlax-true
:vlax-false
)
)
)
 
这可能会让你走上正确的道路。我必须自己解决。如果我愿意,我会和你分享。

Lee Mac 发表于 2022-7-6 11:13:40

也许是这样的:
 

(defun c:ssave ( / *error* vars old s )

(defun *error* ( msg )
   (and old (mapcar 'setvar vars old))
   (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
       (princ (strcat "\n** Error: " msg " **")))
   (princ)
)

(setq vars '("CMDECHO" "FILEDIA") old (mapcar 'getvar vars))
(mapcar 'setvar vars '(0 0))

(while
   (progn
   (setq s (getstring (strcat "\nEnter Filename for Save <" (getvar 'DWGNAME) "> : ")))

   (cond ( (eq "" s)
             (setq s (getvar 'DWGNAME)) nil)

         ( (not (snvalid s))
             (princ "\n** Invalid **")))
   )
)

(command "_.saveas" "_2010" (strcat "G:\\Group\\2D AutoCAD\\HDAL Library\\" s))
(mapcar 'setvar vars old)

(princ)
)

 

 

(defun c:ssave2 ( / s )
(vl-load-coM)

(while
   (progn
   (setq s (getstring (strcat "\nEnter Filename for Save <" (getvar 'DWGNAME) "> : ")))

   (cond ( (eq "" s)
             (setq s (getvar 'DWGNAME)) nil)
      
         ( (not (snvalid s))
             (princ "\n** Invalid **")))
   )
)

(vla-saveas
   (vla-get-ActiveDocument
   (vlax-get-acad-object)
   )
   (strcat "G:\\Group\\2D AutoCAD\\HDAL Library\\" s)
)

(princ)
)

 
对于open:
 

(defun c:oopen ( / s )
(vl-load-com)

(while
   (or
   (eq ""
       (setq s
         (getstring "\nEnter Filename to Open: ")
       )
   )
   (not (snvalid s))
   )
   (princ "\n** Invalid **")
)

(vla-open
   (vla-get-Documents
   (vlax-get-acad-object)
   )
   (strcat "G:\\Group\\2D AutoCAD\\HDAL Library\\" s) :vlax-false
)

(princ)
)

Hickoz_bro 发表于 2022-7-6 11:19:08

该死的!我相信上次我玩LISP的时候没那么难。。。我会试着改变主意,明天在工作中试试看。谢谢你的建议。

dbroada 发表于 2022-7-6 11:22:21

这对我有用。。。
 
(defun c:oopen (/ FileName)
(setvar "cmdecho" 0)
(setvar "filedia" 0)
(setq FileName (getstring 1 "\nEnter Filename to Open: "))
(setq myFile (strcat "P:\\Design_Office\\E106\\E106-11\\" FileName))
(command "OPEN" myFile)
(setvar "filedia" 1)
(setvar "cmdecho" 1)
(princ)
)
 
当然,如果文件不存在,就会出错,但你可以把它整理出来。

ziko 发表于 2022-7-6 11:28:59

 
X2。。。彼此彼此。我单独理解功能。说到嵌套,在什么情况下使用什么函数,以及如何让它们一起工作,这些都让我感到困惑。但至少你的请求写得很清楚。我希望有人会来对我说“让他们轻松起来”。。。谢谢李。
页: [1] 2
查看完整版本: 简单的saveas-LISP