简单的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
)
干杯 也许是这样的
(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)
) 我看到你在那里做了什么,我记得以前使用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)
当做 我想你会用你想保存到的驱动器替换C:。我能想到的唯一让你走上正确道路的方法是:
打开已保存到要保存到的位置的图形,并在命令行中键入DWGPREFIX。你应该知道路
lisp读它的方式。在例行程序中使用它来替换,不要忘记将斜线加倍。如果这不起作用,这里有很多人比我有更高的技能,希望他们能来帮助我。
附言:我不知道你能不能用四个斜杠。我也在网络上工作,每个位置都有一个驱动器。用它代替C: 可以
我按照您的建议做了,删除了对网络位置的引用,并使用了映射的驱动器位置,因此代码如下所示:
(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.
有什么建议吗? 以下是我在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
)
)
)
这可能会让你走上正确的道路。我必须自己解决。如果我愿意,我会和你分享。 也许是这样的:
(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)
)
该死的!我相信上次我玩LISP的时候没那么难。。。我会试着改变主意,明天在工作中试试看。谢谢你的建议。 这对我有用。。。
(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)
)
当然,如果文件不存在,就会出错,但你可以把它整理出来。
X2。。。彼此彼此。我单独理解功能。说到嵌套,在什么情况下使用什么函数,以及如何让它们一起工作,这些都让我感到困惑。但至少你的请求写得很清楚。我希望有人会来对我说“让他们轻松起来”。。。谢谢李。
页:
[1]
2