[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