Hi Jon,

> (client "www.some.com" 80 "page.html"

> Depending on the chunks I read, I want to write some lines to a
> certain file on my disk, say "diskfile.txt", and now and then I also
> want to write a little info to my console with (out NIL (prinl
> SomeInfo)).


> Are there better/smarter ways to do this than to use (out
> "+diskfile.txt" . . .) each time new lines shall be written to the
> file?

I think that writing with (out "+..." ...) is perfectly all right. This
is quite efficient, because the file is opened in append mode so that
the file pointer is immediately at its end.

If you feel that re-opening the file each time is too expensive, you
could also open all output channels in the beginning, and close them
later, e.g.

   (client "www.some.com" 80 "page.html"
      (out NIL  # Default to stdout
         (let (A (open "file1")  B (open "file2"))
            (prinl "toStdout")
            (out A (prinl "to file1"))
            (out B (prinl "to file2"))
            (close A)
            (close B) ) ) )

If there is a possibility that the body of client is aborted before
the ending 'close's are reached (e.g. a 'throw' or and error exit), then
better use 'finally':

   (client "www.some.com" 80 "page.html"
      (out NIL
         (let? A (open "file1")
            (finally (close A)
               (let? B (open "file2")
                  (finally (close B)
                     (prinl "toStdout")
                     (out A (prinl "to file1"))
                     (out B (prinl "to file2")) ) ) ) ) ) )

You could 'bench'mark both versions, but I think there'll be no
significant difference.

♪♫ Alex
UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe

Reply via email to