On Wed, 14 Oct 2009, Duncan Murdoch wrote:
On 10/14/2009 8:25 AM, arnaud Mosnier wrote:
Dear useRs,
I try to import a text file that contain some strange characters coming
from
the misinterpretation of foreign language characters by another software
(see below).
----------------------------------------
Here is an example of text with a line containing characters that bug the
import
name;number
zdsfbg;2
;3
dtryjh;4
----------------------------------------
R do not want to import lines after those strange characters (i.e. import
only the first two lines, one is the header, the second the first line of
data).
I already try to import using other encoding such as latin1 or UTF-8 but it
does not solve the problem.
If these are control characters (that is ^Z is Ctrl-Z, but we've no
real information) then those are the same in every encoding that uses
bytes (or at least those known to iconv).
Replacing those character in a text editor before importing solve the
solution, but I want that the user of my script do not have to edit the
text
before the analysis in R.
Any hint ??
Those funny characters are octal 032, Ctrl-Z. Years ago that was defined on
DOS/Windows as an end of file marker, and I guess our code still honours
that.
More to the point, the Windows C run-time does (AFAIK Ctrl-Z is still
current as EOF under Windows, and Wikipedia says so too), but nothing
in the original posting mentioned this was on Windows, and ctrl-Z has
no effect on the two other OSes I tried which read such a file
successfully.
So without a single piece of the 'at a minimum' information requested
in the posting guide, we are guessing (and I am guessing your example
was done under Windows, too).
You can work around it by stating that you're reading from a binary file, not
a text file:
f <- file("text.txt", "rb")
Then read.csv2(f) fails, but readLines(f) succeeds, so this works:
f <- file("c:/temp/test.txt", "rb")
read.csv2(textConnection(readLines(f)))
name number
1 zdsfbg 2
2 \032\032 \032\032 3
3 dtryjh 4
close(f)
I don't know if there are any characters that would cause readLines to fail,
but there might be, so I'd suggest replacing the buggy software that caused
all the problems in the first place.
This is all a function of the OS's C runtime: I suspect Ctrl-D (eot)
is interpreted as end-of-file on some OSes. Nul (\0) will terminate
strings (that's standard in C, and enforced in recent versions of R).
Duncan Murdoch
--
Brian D. Ripley, rip...@stats.ox.ac.uk
Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
University of Oxford, Tel: +44 1865 272861 (self)
1 South Parks Road, +44 1865 272866 (PA)
Oxford OX1 3TG, UK Fax: +44 1865 272595
______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.