[Rd] Buffering in R 3.5 connections causes incorrect data in readChar

Tomas Kalibera tom@@@k@liber@ @ending from gm@il@com
Wed May 30 15:38:56 CEST 2018


For now I have added a warning that is issued (only) when there is 
definitely a problem (currently a read buffer, a pushback buffer or 
encoding conversion of the input). And I have added a similar warning 
for writing when there is encoding conversion of the output (writeChar). 
But, as you say, the behavior is undefined and it remains so regardless 
of whether there is a warning or not: programs should only use these 
functions with binary connections.

Best
Tomas

On 05/30/2018 12:00 AM, Aaron Goodman wrote:
> Tomas,
>
> Thank you for the explanation. I see in the documentation: "These 
> functions are intended to be used with binary-mode connections."  So I 
> see how using it on a text connection is undefined, and not a bug. An 
> error or warning when attempting to use a it on a text connection 
> would be helpful considering how the behavior has changed in R-3.5.
>
> On Tue, May 29, 2018 at 3:09 AM, Tomas Kalibera 
> <tomas.kalibera using gmail.com <mailto:tomas.kalibera using gmail.com>> wrote:
>
>     On 05/26/2018 05:15 AM, Aaron Goodman wrote:
>
>         I noticed an issue where readChar does not return the correct
>         value after a
>         call to readline. It appears that readChar is not aware of the
>         buffering,
>         so it reads from the end of the buffer, rather than the
>         current position in
>         the file. This is a significant change of behavior from R-3.4.4.
>
>         Below is a test case that I used to home in on the problem.
>
>     Thanks for the report and analysis, you are right, readChar
>     ignores the buffer (and it also ignores the pushback). But please
>     note that this behavior is in line with the documentation, see
>     ?readChar: readChar must only be used with binary connections, but
>     the example uses it on a text connection. Buffering and pushback
>     are only used on (readable) text connections. I will check whether
>     we could report a runtime error.
>
>     Best
>     Tomas
>
>         ---
>
>         p<-"test2.txt"
>         cat("abcdefg
>         hijklmn
>         opqrstu",file=p)
>
>         cat("read char after readline (h)\n")
>         con <- file(p,"r")
>         invisible(readLines(con,1))
>         print(readChar(con,1))
>         close(con)
>
>         cat("read char after readline and seek (h)\n")
>         con <- file(p,"r")
>         invisible(readLines(con,1))
>         invisible(seek(con,seek(con)))
>         print(readChar(con,1))
>         close(con)
>
>         cat("read lines after readline (hijklmn)\n")
>         con <- file(p,"r")
>         invisible(readLines(con,1) )
>         print(readLines(con,1))
>         close(con)
>
>
>         cat("read line after char (bcdefg):\n")
>         con <- file(p,"r")
>         invisible(readChar(con,1) )
>         print(readLines(con,1))
>         close(con)
>
>                 [[alternative HTML version deleted]]
>
>         ______________________________________________
>         R-devel using r-project.org <mailto:R-devel using r-project.org> mailing list
>         https://stat.ethz.ch/mailman/listinfo/r-devel
>         <https://stat.ethz.ch/mailman/listinfo/r-devel>
>
>
>
>


	[[alternative HTML version deleted]]



More information about the R-devel mailing list