将 lua 文件中的数据格式转换

你好,我需要将720个数据集从一个一行的格式转换为以下格式。目前我在一个开放式办公室文件中有它们,每个数字都在一个列中,但我不知道如何转换该格式。

12  -8906.071289 560.890564 93.236107 0 test2
13  -846.814636 -526.218323 10.981694 0 southshore

变为

[12] = {
    [1] = "test2",
    [2] = "-8906.071289",
    [3] = "560.890564",
    [4] = "93.236107",
    [5] = "0",
},
[13] = {
    [1] = "Southshore",
    [2] = "-846.814636",
    [3] = "-526.218323",
    [4] = "10.981694",
    [5] = "0",
},
点赞
用户107090
用户107090

这个awk程序可以实现:

{
    print "[" $1 "] = {"  # 输出第一个域名,并且加上括号和等号
    print "\t[" 1 "] = \"" $NF "\"," # 输出最后一个域名,并加上逗号和引号
    for (i=2; i<NF; i++) { # 循环,从第二个到倒数第二个域名
        print "\t[" i "] = \"" $i "\","
    }
    print "}," # 输出右括号和逗号
}
2017-05-06 11:32:39
用户3735873
用户3735873

在 Lua 中可能的一种方式。使用 program.lua datafile 运行,其中 program.lua 是您给此文件的任何名称,datafile 是您的外部数据文件。使用 program.lua 进行测试。

--[[
12  -8906.071289 560.890564 93.236107 0 test2
13  -846.814636 -526.218323 10.981694 0 southshore
--]]

local filename = arg[1] or arg[0]  -- 从第一个命令行参数或此文件中获取数据
local index,head,tail

print '{'
for line in io.lines(filename) do
  if line:match '^%d+' then
    head, line, tail = line:match '^(%d+)%s+(.-)(%S+)$'
    print('  [' .. head .. '] = {\n    [1] = "' .. tail .. '",')
    index = 1
    for line in line:gmatch '%S+' do
      index = index + 1
      print('    [' .. index .. '] = "' .. line .. '",')
    end
    print '  },'
  end
end
print '}'
2017-05-06 16:34:11