Po tym, jak z mojego zapytania w ubiegłym tygodniu reading badly formed csv in R - mismatched quotes, te same pliki CSV mają również wbudowane znaki sterujące, takie jak ASCII Substitute Character, który jest dziesiętny 26 lub 0x1A. Niestety, readLines()
wydaje się obcinać linię przy tej postaci, więc mam trudności z dopasowaniem wycen - oprócz utraty późniejszych pól w tych liniach!czytanie w pliku tekstowym z SUB (1a) (Control-Z) znak w R na Windows
Próbowałem już readBin()
, ale nie mogę go odczytać tego pliku. Obawiam się, że nie mogę tego dokładnie przeczytać na R, aby dać ci przykład i mam trudności z ich tworzeniem w R. Przykro mi, że nie mogę pokazać tego na czystym przykładzie. Myśli?
Aktualizacja
Teraz jestem zdezorientowany - kiedy użyć kodu
h3 <- paste('1,34,44.4,"', rawToChar(as.raw(c(as.integer(k1), 26, 65))), '",99')
identical(readLines(textConnection(h3)), h3)
otrzymuję TRUE
które znajdę dość zaskakujące!
Aktualizacja 2
h3
[1] "1,34,44.4,\" HIJK\032A \",99"
> writeLines(h3, 'h3.txt')
> h3a <- readLines('h3.txt')
Warning message:
In readLines("h3.txt") : incomplete final line found on 'h3.txt'
> h3a
[1] "1,34,44.4,\" HIJK"
So readlines() reaguje inaczej, gdy pochodzące z textConnection()
i to po cichu obcina w charakterze pomocniczym.
Byłbym zaskoczony, gdyby to miało znaczenie, ale jestem na 2.15.2 na Windows-64.
Update 3
Niektóre niejasne sukces w rozwiązaniu tego ...
zb <- file('h3.txt', "rb")
tmp <- readBin(zb, raw(), size=1, n=400) # raw is always of size =1
nchar(tmp)
# [1] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
close(zb)
tmp
# [1] 31 2c 33 34 2c 34 34 2e 34 2c 22 20 48 49 4a 4b 1a 41 20 22 2c 39 39 0d 0a
rawToChar(tmp)
# [1] "1,34,44.4,\" HIJK\032A \",99\r\n"
czyli jeśli czytam w pliku jako binarne i konwersji na postać() potem wydaje się działać .. To będzie żmudne dla dużych plików CSV ...
Czy może być błąd w R w niepoprawnym wykryciu Control-Z jako końca pliku w oknach?