繁体   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