Deutsch   English   Français   Italiano  
<103i80s$33krc$1@dont-email.me>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail
From: "B. Pym" <Nobody447095@here-nor-there.org>
Newsgroups: comp.lang.lisp,comp.lang.scheme
Subject: Re: Unable to read a list with 'with-open-file'
Date: Thu, 26 Jun 2025 01:33:17 -0000 (UTC)
Organization: A noiseless patient Spider
Lines: 56
Message-ID: <103i80s$33krc$1@dont-email.me>
References: <vbg0g7$vtpn$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Injection-Date: Thu, 26 Jun 2025 03:33:18 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="e164c7e8c4615b560d0a58ee26f330d2";
	logging-data="3265388"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX19gyYkqbCpa8/EKvpfR9l5c"
User-Agent: XanaNews/1.18.1.6
Cancel-Lock: sha1:7vnG6P1PWU0M3l2UfpyR7bRJNrY=

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