虽然我使用过类似的其他语言,但我对Lua来说还是比较新的。到目前为止,我花了8个小时试图解析一个大文本文件无济于事。
有问题的文件看起来像这样:(但长达数千行)
A|KLAX|LOS ANGELES INTERNATIONAL|33942522|-118407161|125
我让用户输入KLAX变量,但我的目标是在不使用表格的情况下找出相关行的这一部分:33942522|-118407161
E.g。
APTDEP_DATA = 33942522|-118407161
甚至可以将.txt文件中的整行作为字符串?
E.g。
APTDEP_DATA = A|KLAX|LOS ANGELES INTERNATIONAL|33942522|-118407161|125
提前感谢一堆。 8小时后,很高兴知道我正在尝试做的事情是否可能。 (我看到的每个教程都是将数据解析为表格)
我已经尝试了很多这方面的事情:
NZAA也是我试图找到的代码。所以不要混淆KLAX的事情。我只是想得到一个结果。
(我无法正确显示代码,对此链接感到抱歉)
答案 0 :(得分:4)
通过查看示例代码段,问题来自您的使用:
AP_LAT = string.match(file, "A|NZAA")
对字符串值执行模式匹配,不 file
句柄。更合适的是:
AP_LAT = string.match(line, "A|NZAA")
以下处理您的输入文件一次一行,并将其解析到各自的字段:
file = assert(io.open("Airports.txt", "r"))
for line in file:lines() do
local fields = { line:match "(%w+)|(%w+)|([%w ]+)|([%d-]+)|([%d-]+)|([%d-]+)" }
-- do something useful with it
print(fields[4], fields[5]) -- the 2 numeric fields you're interested in
end
file:close()
如果你坚持没有桌子,你可以把比赛变成这样的变量:
local first, second, third, etc = line:match "(%w+)|(%w+)|([%w ]+)|([%d-]+)|([%d-]+)|([%d-]+)"
注意:您可以随意修改/优化模式以满足您的需求。这只是一个例子来说明这个想法。
答案 1 :(得分:0)
要从文件中读取行,请使用io.lines
:
for line in io.lines(filename) do
--do some processing
end
要从该行获取特定部分,请使用模式匹配。我不确定你想从这个问题中得到什么。