在lua中读取长行文件
2013-10-17 9:0:6
收藏:0
阅读:81
评论:0
我想在 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 在这里返回一个函数,但重要的是,“第三”行内容以“:tc:opendoc…” 开头,属于 ".ods" 文件的第二行。我很确定这是第二行的第1025个字符。
我猜下面的情况正在发生:Lua 内部有一个 1024 字节的缓冲区用于读取整行。因此,第二行仅读取到第1024个字符,然后缓冲区可能已满。Lua 继续读取该行的其余部分。这也可以解释为什么代码可以在其他平台上工作,因为缓冲区的大小可能设置为另一个值。
我知道你可以通过指定自己的缓冲区来读取文件块,例如:
fhandler:read(2048,"*l")
但这对此处没有帮助,因为它将以2048字节的块导入文件,并不会在行的末尾停止。因此,您需要解析导入的数据并查找换行符等。
所以最后,我的问题是:Lua 内部是否有一个缓冲区,其长度为一次可读取的行的长度,可能设置为1024字节?如何更改此缓冲区的大小?
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法