From Newsgroup: comp.lang.lisp
B. Pym wrote:
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)))))))
(use srfi-42) ;; list-ec
(call-with-input-file "data.bak"
(lambda (in-port)
(list-ec (:port line in-port read-line) line)))
--- Synchronet 3.21d-Linux NewsLink 1.2