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)).
Good.
> 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:[email protected]?subject=Unsubscribe