簡體   English   中英

刪除“NUL”字符(在R中)

[英]Removing “NUL” characters (within R)

我有一個奇怪的文本文件,其中包含一堆NUL字符(實際上大約有10個這樣的文件),我想以編程方式從R中替換它們。 是一個鏈接到其中一個文件。 這個問題的幫助下,我終於想出了一種比臨時更好的方法來進入每個文件並找到並替換煩擾的角色。 事實證明,它們中的每一對應該對應於一個空間( [NUL][NUL] - > )保持文件的預期線寬(這對於將其作為固定寬度進一步讀取至關重要)。

但是,為了健壯,我更喜歡一種更自動化的解決方案,理想情況(為了組織的緣故)我可以在R腳本的開頭添加一些東西,我正在寫清理文件。 這個問題看起來很有希望,但接受的答案是不夠的 - 每當我嘗試在這些文件上使用它時, readLines拋出錯誤(除非我激活skipNul )。

有沒有辦法把這個文件的行放到R中,所以我可以使用gsub或其他任何方法解決這個問題,而無需借助外部程序?

您想要將文件讀取為二進制文件,然后您可以替換NUL ,例如用空格替換它們:

r = readBin("00staff.dat", raw(), file.info("00staff.dat")$size)
r[r==as.raw(0)] = as.raw(0x20) ## replace with 0x20 = <space>
writeBin(r, "00staff.txt")
str(readLines("00staff.txt"))
#  chr [1:155432] "000540952Anderson            Shelley J       FW1949     2000R000000000000119460007620            3  0007000704002097907KGKG1616"| __truncated__ ...

你也可以代替NUL一個真正難得的字符(如S "\\01" )和工作在地方的字符串,例如,讓您是否要替代兩個說NUL S( "\\00\\00" )與一個空間:

r = readBin("00staff.dat", raw(), file.info("00staff.dat")$size)
r[r==as.raw(0)] = as.raw(1)
a = gsub("\01\01", " ", rawToChar(r), fixed=TRUE)
s = strsplit(a, "\n", TRUE)[[1]]
str(s)
# chr [1:155432] "000540952Anderson            Shelley J       FW1949     2000R000000000000119460007620            3  0007000704002097907KGKG1616"| __truncated__

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM