在没有表的Lua中解析大的.text文件

时间:2013-07-23 05:32:22

标签: parsing lua lua-table

虽然我使用过类似的其他语言,但我对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的事情。我只是想得到一个结果。

(我无法正确显示代码,对此链接感到抱歉)

2 个答案:

答案 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

要从该行获取特定部分,请使用模式匹配。我不确定你想从这个问题中得到什么。