微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在lua中将文件行插入表中

如何解决如何在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 举报,一经查实,本站将立刻删除。