gpt4 book ai didi

xml - R:readBin 字符限制(10 000 字节)的解决方法?

转载 作者:数据小太阳 更新时间:2023-10-29 02:10:33 27 4
gpt4 key购买 nike

我有一个包含 XML 字符 header 和二进制数据的文件,然后使用 R 中的 readBin 读取该文件:

zz <- file('myfile', 'rb')

# Read header
x <- readBin(zz, 'character')

# Read binary data
...

但是,当 header 超过 10 000 字节时,我得到以下信息:

Warning message:
In readBin(zz, 'character') :
null terminator not found: breaking string at 10000 bytes

我尝试循环直到字符串匹配 header 的末尾,然后将字符串连接在一起,但随后 XML 无法验证,因为某些部分的结尾已损坏(例如 \xa0W\x97^\xff\177 加在最后)。

我应该如何处理 readBin 字符限制 - 是否有任何简单的解决方法?

欢迎任何类型的建议。谢谢!

更新

下面是一个可重现的例子:

url <- 'http://www.enetpulse.com/wp-content/uploads/sample_xml_feed_enetpulse_icehockey.xml'
x <- paste(readLines(url), collapse = '\n') # more than 10 000 bytes

f <- tempfile()
zz <- file(f, 'wb')
writeBin(x, zz) # header
writeBin(1:10000, zz) # data
close(zz)

# readBin
zz <- file(f, 'rb')
y <- readBin(zz, 'character')
# Warning message:
# In readBin(zz, "character") :
# null terminator not found: breaking string at 10000 bytes
y
# "... participantFK=\"98707\" [\x97^\xff\177"
close(zz)

# readChar
zz <- file(f, 'rb')
readChar(zz, nchars = 999999)
# Error in readChar(zz, nchars = 999999) :
# invalid UTF-8 input in readChar()
close(zz)

# readBin-loop
library(XML)
p <- xmlParse(x) # it works to parse the original xml
zz <- file(f, 'rb')
fun <- function(x) readBin(zz, 'character')
res <- paste(sapply(1:4, fun), collapse = '')
p2 <- xmlParse(res) # errors!

最佳答案

好的。这确实是一种困惑的文件格式。在这里,我提出了一种更传统的老式文件解析方式。基本上以字节形式读取所有内容,直到我们找到空终止符。当我们这样做时,我们获取所有这些字节,转换为字符,然后解析。然后在这个例子中,我将读取点倒回到二进制数据的开头,然后我也可以使用相同的连接读取它。

在您在上面的示例代码中编写测试文件后立即开始,我开始

block <- 256*4
zz <- file(f, 'rb')
rr <- raw()
found <- 0
while ( found==0 ) {
r <- readBin(zz, "raw", block)
if( length(w<-head(which(r==0),1)) ) {
rr <- c(rr, r[1:(w-1)])
found <- 1
seek(zz, -(block-w), origin="current") #rewind
} else {
rr <- c(rr, r)
}
}

library(XML)
p <- xmlParse(rawToChar(rr), asText=TRUE)
dd <- readBin(zz, "integer",10000)
close(zz)

然后恢复 p 中的 XML 文件和 dd 中的整数列表。

这是唯一可能的,因为你做了一个很好的可重现的例子。包含您尝试过的代码也非常好。干杯。

关于xml - R:readBin 字符限制(10 000 字节)的解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25099555/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com