Sujet : Re: Unable to read a list with 'with-open-file'
De : Nobody447095 (at) *nospam* here-nor-there.org (B. Pym)
Groupes : comp.lang.lisp comp.lang.schemeDate : 07. Sep 2024, 00:42:23
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <vbg0g7$vtpn$1@dont-email.me>
User-Agent : XanaNews/1.18.1.6
Tim Bradshaw wrote:
If you want to write a function that returns the lines in the file do
this:
(defun read-lines-from-file (file)
;; Return a list of all the lines in FILE. FILE is either a string
or
;; a pathname
(with-open-file (in file :direction ':input)
;; no real line can be NIL, so we don't need to worry about
;; inventing a unique return value here
(loop for line = (read-line in nil nil)
while line collect line)))
...
Note for CLL people: I think this is a great use of LOOP. It's *so*
easy to see what is happening here:
loop for line = <get next line from file, NIL on EOF>
while line collect line
Of course it's not pure functional Lisp. But *so what*?
Gauche Scheme
(use gauche.generator)
(with-input-from-file "output.dat" (lambda()
(generator->list read-line)))
Another way:
(use file.util)
(file->list read-line "output.dat")
Another way:
(define (collect-file-lines file)
(with-input-from-file file (lambda()
(let go ()
(if (eof-object? (peek-char))
'()
(cons (read-line) (go)))))))