我想在Windows上使用lua逐行阅读.ods
文件。我曾经做过的代码在另一个平台上工作但在Windows上失败了。所以我更改了代码以查看发生了什么:
local fhandler = io.open(path,"r")
print(pcall(fhandler.read,fhandler,"*l"))
print(pcall(fhandler.read,fhandler,"*l"))
print(pcall(fhandler.read,fhandler,"*l"))
我得到的输出如下:
true <?xml version="1.0" encoding="UTF-8"?>
false function: 0x003d39e0
true :tc:opendocument:xmlns:script:1.0" [...] office:version="1.2">
因此代码在.ods文件的第二行失败。我不确定为什么pcall
在这里返回一个函数,但重要的是,&#34;第三个&#34;的内容。以&#34;开头的行:tc:opendoc ...&#34;属于.ods文件的第二行。我很确定它是第二行的1025个字符。
我想以下情况正在发生:必须有一个1024字节的lua内部缓冲区才能读取整行。因此,第二行只读取到第1024个字符,然后可能缓冲区已满。 Lua继续阅读其余内容。这也可以解释为什么代码可以在缓冲区可能设置为其他值的其他平台上运行。
我知道您可以通过指定自己的缓冲区来读取文件块,如:
fhandler:read(2048,"*l")
但这在这里没有用,因为它然后以2048字节块的形式导入文件,并且不会在一行的末尾停止。因此,您需要解析导入的数据并查找换行符等。
所以最后,我的问题是:是否有一个lua内部缓冲区可以一次读取一行的长度,可以设置为1024字节?你怎么能改变这个缓冲区的大小?