用SUB(1A)(控制-Z)字符中的R讀取文本文件從上週reading badly formed csv in R - mismatched quotes我的查詢繼,這些相同的CSV文件也有嵌入式控制字符,如ASCII Substitute Character這是十進制26或0x1A。不幸的是readLines()
似乎在這個字符處截斷了行,所以我很難匹配引號 - 除了丟失這些行中的後面的字段!在Windows
我試圖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"
所以readlines方法()從textConnection()
到來時的反應不同,它在SUB字符默默截斷。
,如果它的確與衆不同,但我在2.15.2在Windows上,64我會感到驚訝。
更新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"
也就是說,如果我的文件作爲二進制文件中讀取並轉換爲字符()之後,似乎工作.. 。這將是大的CSV文件乏味...
難道還有一個錯誤的R中不正確地檢測控制-Z作爲Windows文件結束?