10

先週の私のクエリに続いて、R-mismatched quotes で不適切な形式の csv を読んでいます。これらの同じ CSV ファイルには、 10 進数の 26 または 0x1A であるASCII置換文字などの制御文字も埋め込まれています。残念ながらreadLines()、この文字で行が切り捨てられているように見えるので、これらの行の後のフィールドを失うことを除けば、引用符を一致させるのが困難です!

しようとしましreadBin()たが、このファイルを読み取ることができません。申し訳ありませんが、これを R にきれいに読み込んで例を示すことができず、R でこれらを作成するのが困難です。きれいな例でデモンストレーションできなくて申し訳ありません。考え?

アップデート

今、私は混乱しています-コードを使用するとき

 h3 <- paste('1,34,44.4,"', rawToChar(as.raw(c(as.integer(k1), 26, 65))), '",99')
 identical(readLines(textConnection(h3)), h3)

TRUEはかなり驚くべきことを見つけました!

更新 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"

そのため、a から来る場合の readLines() の反応は異なりtextConnection()、SUB 文字で静かに切り捨てられます。

違いがあれば驚くでしょうが、私は Windows-64 で 2.15.2 を使用しています。

アップデート 3

これを解決するための漠然とした成功...

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"

つまり、ファイルをバイナリとして読み込み、その後 character() に変換すると、うまくいくようです...これは、大きなCSVファイルの場合は面倒です...

Windows で Control-Z をファイルの終わりとして誤って検出する R にバグがある可能性はありますか??

4

2 に答える 2

3

ファイルの途中に SUB または CTRL-Z を含む csv ファイルで read.csv を使用したときにも、この問題に遭遇しました。

readr パッケージで解決しました (ファイルがカンマ区切りの場合)

library(readr)
read_csv("h3.txt")

あなたが持っている場合; セパレーターとして、次を使用します。

library(readr)
read_csv2("h3.txt")
于 2015-05-19T19:25:52.470 に答える