Lua脚本:使用单个模式捕获文件中包含的多个值

我有一个文本文件,其中的数据格式为年份、城市、国家。每行数据都以一个年份、城市、国家写入。例如:

  • 1896,雅典,希腊
  • 1900,巴黎,法国

以前我是像这样硬编码使用数据的

local data = {}

data[1] = { year = 1896, city = "Athens", country = "Greece" }
data[2] = { year = 1900, city = "Paris", country = "France" }
data[3] = { year = 1904, city = "St Louis", country = "USA" }
data[4] = { year = 1908, city = "London", country = "UK" }
data[5] = { year = 1912, city = "Stockholm", country = "Sweden" }
data[6] = { year = 1920, city = "Antwerp", country = "Netherlands" }

现在我需要从文件中读取行并将值传递到私有知识库“local data = {}”中

无法弄清楚如何使用单个模式从文件中的数据捕获多个值。

我的代码到目前为止是

local path = system.pathForFile( "olympicData.txt", system.ResourceDirectory )

-- 打开文件句柄
local file, errorString = io.open( path, "r" )

if not file then
    -- 出现错误;输出原因
    print( "文件错误:" .. errorString )
else
    -- 读取文件的每一行
    for line in file:lines() do
        local i, value = line:match("%d")
        table.insert(data, i)

    -- 关闭文件
    io.close(file)

end

file = nil
点赞
用户2858170
用户2858170

假设你读到了这样一行:

1896, Athens, Greece

您可以使用捕获方法简单地获取所需的值。

https://www.lua.org/manual/5.3/manual.html#6.4.1

捕获: 模式可以包含用括号括起来的子模式;它们描述捕获。当匹配成功时,匹配捕获的目标字符串的子串将被存储(捕获)以供将来使用。捕获根据其左括号编号。例如,在模式“(a*(.)%w(%s*))”中,“a*(.)%w(%s*)”匹配的部分将作为第一个捕获(因此具有编号1)存储;匹配“.”的字符被捕获为2,匹配“%s*”部分具有编号3。

作为一个特殊情况,空的捕获()捕获当前字符串的位置(一个数字)。例如,如果我们在字符串“flaaap”上应用模式“()aa()”,会有两个捕获:3和5。

local example = "1896, Athens, Greece"
local year, city, country = example:match("(%d+), (%w+), (%w+)")
print(year, city, country)
2020-09-02 08:34:53