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