如何使用 LUA 解析配置文件(一种 CSV 格式)
How to parse a configuration file (kind of a CSV format) using LUA
我在小型 ESP8266 芯片上使用 LUA,试图解析如下所示的文本字符串。我是 LUA 的新手,尝试了很多在这个论坛上找到的类似脚本。
data="
-- String to be parsed\r\n
Tiempo1,20\r\n
Tiempo2a,900\r\n
Hora2b,27\r\n
Tiempo2b,20\r\n
Hora2c,29\r\n
Tiempo2c,18\r\n"
我的目标是解析字符串,return 所有配置对 (name/value)。
如果需要,我可以修改配置文件的语法,因为它是我创建的。
我一直在尝试这样的事情:
var1,var2 = data:match("([Tiempo2a,]), ([^,]+)")
但它是 returning nil,nil。我认为我这样做的方式非常错误。
非常感谢您的帮助。
您需要使用 gmatch 并在行尾解析不包括不可打印字符 (\r\n) 的值或使用 %d+
local data=[[
-- String to be parsed
Tiempo1,20
Tiempo2a,900
Hora2b,27
Tiempo2b,20
Hora2c,29
Tiempo2c,18]]
local t = {}
for k,v in data:gmatch("(%w-),([^%c]+)") do
t[#t+1] = { k, v }
print(k,v)
end
我在小型 ESP8266 芯片上使用 LUA,试图解析如下所示的文本字符串。我是 LUA 的新手,尝试了很多在这个论坛上找到的类似脚本。
data="
-- String to be parsed\r\n
Tiempo1,20\r\n
Tiempo2a,900\r\n
Hora2b,27\r\n
Tiempo2b,20\r\n
Hora2c,29\r\n
Tiempo2c,18\r\n"
我的目标是解析字符串,return 所有配置对 (name/value)。 如果需要,我可以修改配置文件的语法,因为它是我创建的。 我一直在尝试这样的事情:
var1,var2 = data:match("([Tiempo2a,]), ([^,]+)")
但它是 returning nil,nil。我认为我这样做的方式非常错误。
非常感谢您的帮助。
您需要使用 gmatch 并在行尾解析不包括不可打印字符 (\r\n) 的值或使用 %d+
local data=[[
-- String to be parsed
Tiempo1,20
Tiempo2a,900
Hora2b,27
Tiempo2b,20
Hora2c,29
Tiempo2c,18]]
local t = {}
for k,v in data:gmatch("(%w-),([^%c]+)") do
t[#t+1] = { k, v }
print(k,v)
end