我一直在将值写入文本/csv文件,但由于某些信息现在已更改,我需要更新该文件以反映新的值/计算。
text/csv文件是一个关于能耗的报告,示例如下,KwH Unit Cost
和Cost
(根据KWH Used
* KwH Unit Cost
计算)都需要更新。
Date Time Run, Start Epoc, End Epoc, KwH Start, KwH End, KwH Used, KwH Unit Cost, Cost Spent
2022-12-11 13:12:53, 1670763866, 1670764373, 7841.1690, 7841.2920, 0.12, 0.3506, 0.04,
2022-12-11 23:59:00, 1670764373, 1670803140, 7841.2920, 7853.5480, 12.26, 0.3506, 4.3,
我可以将csv/text文件解析为一个表,但我无法计算出如何将单位成本从0.3506
提取更新为0.3877
,并根据新的费率重新计算Cost
。
下面是我的Lua代码,它显示了成本值。这是我所能做到的。
local CSV = [[Date Time Run, Start Epoc, End Epoc, KwH Start, KwH End, KwH Used, KwH Unit Cost, Cost Spent
2022-12-11 13:12:53, 1670763866, 1670764373, 7841.1690, 7841.2920, 0.12, 0.3506, 0.04,
2022-12-11 23:59:00, 1670764373, 1670803140, 7841.2920, 7853.5480, 12.26, 0.3506, 4.3,
2022-12-12 23:59:00, 1670803140, 1670889540, 7853.5480, 7887.0740, 33.53, 0.3506, 11.76,
2022-12-13 23:59:00, 1670889540, 1670975940, 7887.0740, 7917.4370, 30.36, 0.3506, 10.64, ]]
local function tprint (tbl, indent)
if not indent then indent = 0 end
for k, v in pairs(tbl) do
formatting = string.rep(" ", indent) .. k .. ": "
if type(v) == "table" then
print(formatting)
tprint(v, indent+1)
elseif type(v) == 'boolean' then
print(formatting .. tostring(v))
else
print(formatting .. v)
end
end
end
local linePattern = "[^\r\n]+"
local csWordPattern = "[^,]+"
local function parseCsv(csv)
local rows = {}
for line in string.gmatch(csv, linePattern) do
local row = {}
for word in string.gmatch(line,csWordPattern) do
table.insert(row, word)
end
table.insert(rows, row)
end
return rows
end
local CSV_Table = parseCsv(CSV)
print(tprint(CSV_Table))
for k,v in pairs(CSV_Table) do
--print (k,v)
for k1,v1 in pairs(v) do
--print (k1,v1)
if k1 == 8 then
print(v1)
end
end
end
任何/所有的帮助都非常感谢。
1条答案
按热度按时间nwo49xxi1#
我设法让我的代码工作,这是我在最后使用..