[Rd] writting null (\000 or ^@) to an external text file without the new warning
Barry Rowlingson
b.rowlingson at lancaster.ac.uk
Tue Oct 28 20:57:07 CET 2008
2008/10/28 Greg Snow <Greg.Snow at imail.org>:
> I have some functions that write an external text file for postprocessing by another program. Some instructions to the other program need to be indicated by null values (\000 or ^@). The function currently uses code like:
>
> writeChar(rawToChar(as.raw(0)), con)
>
> where con is a connection to the file. Previous to version 2.8.0 this worked fine. With 2.8.0 it still works, but I get a warning message about "truncating string with embedded null: '\0'" every time. This is documented and not a bug, but I still find it annoying.
>
> One thing I could do is to turn off all warnings before doing this, but then if there is some other warning generated, then I will miss the other warning(s).
>
> Is there a better way to write the null to the text file? Or is there a way to suppress just this warning without suppressing any other warnings that may occur?
The warning happens when you construct the string, so somehow you
have to avoid making the string. How about using writeBin with a
connection opened in binary mode:
> con=file("test2.raw","wb")
> writeBin(as.raw(1),con,size=1)
> writeBin(as.raw(0),con,size=1)
> writeBin(as.raw(0),con,size=1)
> writeBin(as.raw(7),con,size=1)
> close(con)
>
Save workspace image? [y/n/c]: n
now lets dump it:
rowlings at fab008000006:~$ od -x test2.raw
0000000 0001 0700
0000004
Which I think is correct, maybe some fiddling with endianness is needed...
Barry
More information about the R-devel
mailing list