首页 文章

在没有表的情况下解析Lua中的大型.txt文件

提问于
浏览
0

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

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

2 回答

  • 0

    从查看示例代码段开始,问题来自于您的使用:

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

    注意:随意修改/优化模式以满足您的需求 . 这只是一个例子来说明这个想法 .

  • 4

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

    for line in io.lines(filename) do 
        --do some processing
    end
    

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

相关问题