如何解决使用单个模式来捕获lua脚本中文件中包含的多个值
我有一个文本文件,其中包含YEAR,CITY,COUNTRY格式的数据。数据以每行YEAR,CITY,COUNTRY的形式写入。例如-:
- 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 path = system.pathForFile( "olympicData.txt",system.ResourceDirectory )
-- Open the file handle
local file,errorString = io.open( path,"r" )
if not file then
-- Error occurred; output the cause
print( "File error: " .. errorString )
else
-- Read each line of the file
for line in file:lines() do
local i,value = line:match("%d")
table.insert(data,i)
-- Close the file
io.close(file)
end
file = nil
解决方法
鉴于您读到这样的一行
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。
作为一种特殊情况,空的capture()捕获当前字符串 位置(一个数字)。例如,如果我们将模式“()aa()”应用于 字符串“ flaaap”,将捕获两个:3和5。
local example = "1896,Greece"
local year,city,country = example:match("(%d+),(%w+),(%w+)")
print(year,country)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。