Lua - 如何修改 .csv 文件的第一行?

我有一个系统生成的 feed.csv 文件,其中有通用的列标题,例如下面...

created_at  entry_id    field1  field2  field3  field4  field5  field6  field7  field8
2021-02-03 06:47:02 UTC 2614    18  19.1    18  20  16.7    15.8    6.7 10.00
2021-02-03 07:17:02 UTC 2615    18  19  18  20  16.6    15.7    6.6 10.00
2021-02-03 07:47:02 UTC 2616    18  19  18  20  16.5    15.6    6.5 9.90

使用 Lua,我该如何将第一行更改为以下内容?

created_at  entry_id    front_room  bed_1   bed_2   kitchen outside bathroom    shed    porch

我有一个起点的想法,但不确定接下来要做什么?

local tempfile = io.open(mnt/nas/feed.csv, "r") -- 读取 .csv 文件的文件路径
local lines = {}
local lineCt = 1
    for line in tempfile:lines() do
        if(lineCt == 1) then
    ????
点赞
用户4984564
用户4984564
local tempfile = io.open(mnt/nas/feed.csv, "r") -- 要读取的 .csv 文件。

local field_names = { "front_room", "bed_2", "bed_2", "等等..." }

local function replace_fields(header)
   -- 替换掉所有 "fieldXX" 字符串
   return header:gsub("field%d+", function(field)
      -- 从 "fieldXX" 字符串中提取数字
      local num = tonumber(field:match("%d+"))
      -- 查找正确的名称并返回
      return field_names[num]
   end)
end

local header = tempfile:read()
-- 筛选 header 并对其执行某些操作
do_something_with(replace_fields(header))
-- 现在遍历剩余的行并以原样使用它们
for line in tempfile:lines() do
   do_something_with(line)
end

使用协程,你可以很容易地构建一个迭代器,该迭代器筛选第一行,然后返回不经修改的其余部分,如果你想要多次重复使用这种代码。

2021-02-05 10:06:46
用户6676439
用户6676439

感谢 @darkwiiplayer 的帮助,我使用以下代码完成了我需要做的事情:

local hFile = io.open("mnt/nas/feed.csv", "r") -- 读取文件
local field_names = { "conservatory", "kitchen", "hallway", "living_toom", "front_room", "lean_to", "outside", "cabin" } -- 字段名称数组

local function ModifyLine(header)
   -- 替换所有的 "fieldXX" 字符串
   return header:gsub("field%d+", function(field)
      -- 从 "fieldXX" 字符串中提取数字
      local num = tonumber(field:match("%d+"))
      -- 查找正确的名称并返回
      return field_names[num]
   end)
end

local lines = {}
local restOfFile
local lineCt = 1
for line in hFile:lines() do
   if(lineCt == 1) then -- 修改该行
      lines[#lines + 1] = ModifyLine(line) -- 将旧行更改为新行。
      restOfFile = hFile:read("*a")
      break
   else
      lineCt = lineCt + 1
      lines[#lines + 1] = line
   end
end
hFile:close()

hFile = io.open("mnt/nas/feed.csv", "w") -- 写入更改后的文件
for i, line in ipairs(lines) do
   hFile:write(line, "\n")
end
hFile:write(restOfFile)
hFile:close()
2021-02-06 19:57:58