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

How to create and write into text file in Lisp (continued)

根据上面的问题,当我尝试处理代码时,我得到

"Error: no function definition: STR".

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

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

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

在 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