如何解决如何在lua中将文件行插入表中
我正在尝试使用 lua 制作一个 discord 机器人,并且到目前为止进展顺利,但是我在 lua 的 IO 部分遇到了一些问题。 我试图在 lua 中读取一个大的 list.txt 文件并将每一行插入到一个表中,但到目前为止我所有的尝试都没有奏效。 有什么建议吗?
尝试 #1 吐出 nil:
local open = io.open
local function read_file(path)
local file = open(path,"r") -- r read mode and b binary mode
if not file then return nil end
local content = file:read "*a" -- *a or *all reads the whole file
file:close()
return content
end
local fileContent = read_file("list.txt")
local vga_files = {}
table.insert(vga_files,fileContent)
解决方法
我无法复制您运行代码的错误。您的代码是有效的,并且很可能按照您的要求执行。
在这里告诉 read_file
函数返回 nil
:
if not file then return nil end
因此,如果未找到 file
,您将获得 nil
。调试的一个很好的步骤是在这个 if 语句的主体中添加一个打印,看看它是否被输入。
当您调用 read_file
时:
local fileContent = read_file("list.txt")
你只传入一个文件名,这意味着 lua 会在代码执行的任何地方寻找它,这个位置可能与你期望的不同。
我通过将读取指向自身并打印结果来验证您的代码是否有效。
local open = io.open
local function read_file(path)
local file = open(path,"r") -- r read mode and b binary mode
if not file then return nil end
local content = file:read "*a" -- *a or *all reads the whole file
file:close()
return content
end
print(read_file("so_io_read_test.lua"))
此外,为了获得您应该真正使用的行,io.lines
创建了一个迭代器,您可以在 for 循环中使用该迭代器。
local vga_files = {}
for line in io.lines("list.txt") do
table.insert(vga_files,line)
end
或者,您可以读取文件,然后使用 gmatch 拆分行。
local contents = read_file("so_io_read_test.lua")
for line in contents:gmatch("([^\n]+)") do
table.insert(vga_files,line)
end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。