Theo sau truy vấn của tôi tuần trước reading badly formed csv in R - mismatched quotes, các tệp CSV này cũng có các ký tự điều khiển được nhúng như ASCII Substitute Character. 26 hoặc 0x1A. Thật không may readLines()
dường như cắt ngắn dòng tại ký tự này, vì vậy tôi gặp khó khăn trong việc so khớp các dấu ngoặc kép - ngoài việc mất các trường sau trong các dòng này!đọc trong một tệp văn bản có ký tự SUB (1a) (Control-Z) trong R trên Windows
Tôi đã cố gắng readBin()
nhưng tôi không thể đọc tệp này. Tôi e rằng tôi không thể đọc được điều này trong R để đưa ra một ví dụ và tôi gặp khó khăn trong việc tạo ra chúng trong R. Xin lỗi vì không thể chứng minh bằng một ví dụ rõ ràng. Suy nghĩ?
Cập nhật
Bây giờ tôi đang bối rối - khi tôi sử dụng mã
h3 <- paste('1,34,44.4,"', rawToChar(as.raw(c(as.integer(k1), 26, 65))), '",99')
identical(readLines(textConnection(h3)), h3)
tôi nhận được TRUE
mà tôi thấy khá ngạc nhiên!
Cập nhật 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"
Vì vậy readlines() phản ứng khác nhau khi đến từ một textConnection()
và nó âm thầm truncates tại nhân vật SUB.
Tôi sẽ ngạc nhiên nếu nó tạo sự khác biệt nhưng tôi ở mức 2,15,2 trên Windows-64.
Cập nhật 3
Một số thành công không rõ ràng trong việc giải quyết này ...
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"
tức là nếu tôi đọc trong nội dung tập tin nhị phân và chuyển đổi sang nhân vật() sau đó nó dường như làm việc .. Điều này sẽ tẻ nhạt đối với các tệp CSV lớn ...
Có thể có lỗi trong R khi phát hiện không chính xác Control-Z khi kết thúc tệp trên cửa sổ không ??