【问题标题】:parse csv using lua script使用 lua 脚本解析 csv
【发布时间】:2016-10-07 11:38:44
【问题描述】:

我有一个包含如下数据的 csv 文件:

+12345678901,08:00:00,12:00:00,1111100,35703,test.domain.net
+12345678901,,,0000000,212,test.domain.net

我正在尝试编写循环遍历每一行的 lua 代码,并创建一个像这样的值数组:

local mylist = {}
for line in io.lines("data/dd.csv") do
        local id, start, finish, dow, int, domain = line:match("(+%d+),(%d*:*),(%d*:*),(%d*),(%d*),(%a*.*)")
        mylist[#mylist + 1] = { id = id, start = start, finish = finish, dow = dow, int = int, domain = domain}
        print(mylist[#mylist]['id'])
end

问题在于,当代码遇到 start 和 finish 为空值的行时,正则表达式会失败并且所有字段都为零。

我认为使用 * 表示 0 或更多... 我似乎找不到我的错误/错字。

谢谢。

【问题讨论】:

  • 试试"(%+%d+),([0-9:]*),([0-9:]*),(%d*),(%d*),(.*)"
  • 那行得通。嘘。我从来没有想过这个

标签: regex csv lua


【解决方案1】:

这种模式适合我:

"(.-),(.-),(.-),(.-),(.-),(.-)$"

【讨论】:

    【解决方案2】:

    看来您只需要将数字和: 分组到[...] 中:

    match("(%+%d+),([%d:]*),([%d:]*),(%d*),(%d*),(.*)")
            ^       ^^^^^^   ^^^^^^     
    

    现在,[%d:]* 匹配零个或多个数字或 : 符号。您的模式未找到匹配项,因为 %d*:* 匹配 0+ 个数字,后跟 0+ 个 : 符号,并且您有超过 1 个这样的序列。

    此外,您需要转义第一个 + 以确保它与文字 + 匹配。

    online Lua demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-23
      • 2018-08-05
      • 2016-12-30
      • 1970-01-01
      • 1970-01-01
      • 2010-12-06
      • 1970-01-01
      相关资源
      最近更新 更多