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

时间:2016-03-28 20:36:13

标签: lua

所以我能够将文件中的数据放入表中,并将每行的第一个单词设置为键。如何根据仅使用键读入另一个文件的顺序在表中显示最新内容?

-- see if the file exists
function file_exists(file)
  local f = io.open("data.txt", "rb")
  if f then f:close() end
  return f ~= nil
end

-- get all lines from a file, returns an empty
-- list/table if the file does not exist
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+") -- word
    lines[first_word] = line
  end
  return lines
end

local lines = lines_from(file)

end

1 个答案:

答案 0 :(得分:0)

您的代码中存在一些错误:

-- see if the file exists
function file_exists(file)
    local f = io.open(file, "rb") -- <-- changed "data.txt" to file
    if f then f:close() end
    return f ~= nil
end

-- get all lines from a file, returns an empty
-- list/table if the file does not exist
function lines_from(file)
    if not file_exists(file) then return {} end
    lines = {}
    for line in io.lines(file) do -- <-- changed "data.txt" to file
      first_word = string.match(line, "%a+") -- <-- changed gmatch to match (IMPORTANT)
      lines[first_word] = line
    end
    return lines
end

local lines = lines_from(file)

我删除了最后一个结尾,因为它与任何块都不匹配。 要匹配的更改gmatch很关键,因为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