根据读入的文件显示表格信息

所以我可以将文件中的数据放入一个表格,并将每行的第一个单词设置为键。如何按照读入另一个仅包含键的文件的顺序显示表格中的内容?

--看看文件是否存在
function file_exists(file)
 local f = io.open("data.txt","rb")
 if f then f:close () end
 return f ~ = nil
end

--从文件中获取所有行,如果文件不存在则返回一个空
--列表/表
function lines_from(file)
 if not file_exists(file) then return {} end
 lines = {}
 for line in io.lines("data.txt") do
 first_word = string.gmatch(line,"%a+")-单词
 lines[first_word] = line
 end
 return lines
end

local lines = lines_from(file)
点赞
用户3197530
用户3197530

你的代码中有一些错误:

-- 检查文件是否存在
function file_exists(file)
    local f = io.open(file, "rb") -- <-- 将 "data.txt" 更改为 file
    if f then f:close() end
    return f ~= nil
end

-- 从文件中获取所有行,如果文件不存在则返回一个空的
-- 列表/table
function lines_from(file)
    if not file_exists(file) then return {} end
    lines = {}
    for line in io.lines(file) do -- <-- 将 "data.txt" 更改为 file
      first_word = string.match(line, "%a+") -- <-- 将 gmatch 更改为 match(重要)
      lines[first_word] = line
    end
    return lines
end

local lines = lines_from(file)

我删除了最后一个 end,因为它没有匹配任何块。 将 gmatch 更改为 match 是关键,因为 gmatch 返回一个迭代器,是 _函数_。

关于你的问题:读取关键文件,但以数组的方式保存其条目:

function key_file(file)
    if not file_exists(file) then return {} end
    keys = {}
    for line in io.lines(file) do
      key = string.match(line, "%a+")
      table.insert(keys, key)
    end
    return keys
end

在另一个地方,你遍历关键数组,使用键来访问行表:

local lines = lines_from("data.txt")
local keys = key_file("keys.txt")

for i, key in ipairs(keys) do
    print(string.format("%d: %s", i, lines[key]))
end
2016-03-28 22:51:46