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

    From B. Pym@21:1/5 to Tim Bradshaw on Fri Sep 6 22:42:23 2024
    XPost: comp.lang.scheme

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

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)