Marcel Watson
Marcel Watson

Reputation: 13

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

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

From the question above, when I try to work the code I get

"Error: no function definition: STR".

Can anyone tell me why it does not work for me?? Thank you!

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

Upvotes: 1

Views: 4226

Answers (1)

Lee Mac
Lee Mac

Reputation: 16015

As noted by others in the comments, the example code that you are using is Common LISP, not AutoLISP (the dialect of LISP used by AutoCAD). As such, functions such as str, with-open-file, and format are not defined in the AutoLISP dialect.

In AutoLISP, the general approach would be as follows:

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

Commented, that is:

;; 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

Upvotes: 0

Related Questions