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

Tomas Kalibera tom@@@k@liber@ @ending from gm@il@com
Tue May 29 12:09:00 CEST 2018


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 mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



More information about the R-devel mailing list