• Re: Unable to read a list with 'with-open-file'

    From B. Pym@Nobody447095@here-nor-there.org to comp.lang.lisp,comp.lang.scheme on Thu Jun 26 01:33:17 2025
    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