Re: Printing to file while reading from 'client'
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'
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'
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