如何在Lisp中创建和写入文本文件(续)

时间:2019-11-21 03:09:54

标签: lisp autocad autolisp

https://stackoverflow.com/a/9495670/12407473

从上面的问题中,当我尝试使用代码时,我得到了

  

“错误:没有函数定义:STR”。

谁能告诉我为什么它对我不起作用?谢谢!

(with-open-file (str "/.../filename.txt"
                     :direction :output
                     :if-exists :supersede
                     :if-does-not-exist :create)
  (format str "write anything ~%"))

1 个答案:

答案 0 :(得分:0)

正如其他人在评论中所指出的那样,您使用的示例代码是Common LISP,而不是AutoLISP(AutoCAD使用的LISP的方言)。因此,在AutoLISP语言中未定义诸如strwith-open-fileformat之类的功能。

在AutoLISP中,一般方法如下:

(if (setq des (open "C:\\YourFolder\\YourFile.txt" "w"))
    (progn
        (write-line "Your text string" des)
        (close des)
    )
)

评论,即:

;; If the following expression returns a non-nil value
(if
    ;; Assign the result of the following expression to the symbol 'des'
    (setq des
        ;; Attempt to acquire a file descriptor for a file with the supplied
        ;; filepath. The open mode argument of "w" will automatically create
        ;; a new file if it doesn't exist, and will replace an existing file
        ;; if it does exist. If a file cannot be created or opened for writing,
        ;; open will return nil.
        (open "C:\\YourFolder\\YourFile.txt" "w")
    ) ;; end setq

    ;; Here, 'progn' merely evaluates the following set of expressions and
    ;; returns the result of the last evaluated expression. This enables
    ;; us to pass a set of expressions as a single 'then' argument to the
    ;; if function.
    (progn

        ;; Write the string "Your text string" to the file
        ;; The write-line function will automatically append a new-line
        ;; to the end of the string.
        (write-line "Your text string" des)

        ;; Close the file descriptor
        (close des)
    ) ;; end progn

    ;; Else the file could not be opened for writing

) ;; end if