问题
If I write a file using
(with-open-file (s "~/example.sexp" :direction :output)
(write '(1 2 3) :stream s)
(write '(4 5 6) :stream s)
(write '(7 8 9) :stream s))
A file is created containing
(1 2 3)(4 5 6)(7 8 9)
But when I attempt to open and read it using
(setf f (open "~/example.sexp"))
(read :input-stream f)
I get an ":INPUT-STREAM is not of type STREAM" error.
(type-of f)
returns STREAM::LATIN-1-FILE-STREAM which looks like it is at least close to what I need. What is the difference?
How can I read the lists I've written to the file?
回答1:
You got the arguments to READ
wrong. It should be simply (read f)
, not (read :input-stream f)
.
回答2:
You can also use with-open-file:
(with-open-file (s "~/example.sexp")
(read s))
Or even:
(with-open-file (*standard-input* "~/example.sexp")
(read))
:input is the default direction.
来源:https://stackoverflow.com/questions/4119509/how-to-read-sexp-from-file