Re: Printing to file while reading from 'client'

2015-08-04 Thread Jon Kleiser
Hi Alex,

Thanks a lot! I’ll make up my mind re. which one to use.

/Jon

On 4. Aug, 2015, at 15:42, Alexander Burger  wrote:

> 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

PԔ � &j)mX�����zV�u�.n7�

Re: Printing to file while reading from 'client'

2015-08-04 Thread Alexander Burger
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:picolisp@software-lab.de?subject=Unsubscribe


Printing to file while reading from 'client'

2015-08-04 Thread Jon Kleiser
Hi,

I want to read some chunks from a HTTP connection, starting e.g. like this:

(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?

/Jon--
UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe