在Lua中解析大型.txt文件,而不需要使用表格。

我对Lua相当新,虽然我使用过其他类似的语言。到目前为止,我已经花了8个小时尝试分析一个大的文本文件,但是没有任何结果。

所涉及的文件看起来像这样:(但有数千行)

A|KLAX|LOS ANGELES INTERNATIONAL|33942522|-118407161|125

我已经让用户输入了KLAX变量,但我的目标是获取所讨论的行的这部分内容,而不使用表格:33942522|-118407161

例如

APTDEP_DATA = 33942522|-118407161

甚至将整个行作为字符串从.txt文件中获取?

例如

APTDEP_DATA = A|KLAX|LOS ANGELES INTERNATIONAL|33942522|-118407161|125

非常感谢。8个小时后,知道我正在尝试做的事情是否可能会很好。(我看到的每个教程都是将数据解析成表格)

我尝试了很多类似的方法:

NZAA也是我正在寻找的代码。所以不要因KLAX而感到困惑。我只是试图得到一个结果。

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

点赞
用户1009479
用户1009479

要从文件中读取行,请使用 io.lines

for line in io.lines(filename) do
    --进行某些处理
end

要从行中获取特定部分,使用模式匹配。我不确定您要从问题中获取什么。

2013-07-23 06:06:28
用户234175
用户234175

从您的示例片段中可以看出,问题出在您使用的地方:

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-]+)"

注意:随意修改/完善模式以适应您的需要。 这只是一个例子,用于说明该思想。

2013-07-23 07:11:24