我如何为 gmatch 使用多个模式
How do I use more then one pattern for gmatch
您好,我正在尝试从文本文件中获取一些数据并将其放入 table。
我不确定如何在做我想做的事情的同时添加多个模式,我知道这个模式本身 %a+ 找到字母而 %b{} 找到括号,但我不确定如何将它们组合在一起以便我找到字母作为键,方括号作为值,并将它们放入我可以使用的 table 中。
文本文件:
left = {{0,63},{16,63},{32,63},{48,63}}
right = {{0,21},{16,21},{32,21},{48,21}}
up = {{0,42},{16,42},{32,42},{48,42}}
down = {{0,0},{16,0},{32,0},{48,0}}
代码:
local function get_animations(file_path)
local animation_table = {}
local file = io.open(file_path,"r")
local contents = file:read("*a")
for k, v in string.gmatch(contents, ("(%a+)=(%b{})")) do -- A gets words and %b{} finds brackets
animation_table[k] = v
print("key : " .. k.. " Value : ".. v)
end
file:close()
结束
get_animations("Sprites/Player/MainPlayer.txt")
这是有效的 Lua 代码,为什么不简单地执行它呢?
left = {{0,63},{16,63},{32,63},{48,63}}
right = {{0,21},{16,21},{32,21},{48,21}}
up = {{0,42},{16,42},{32,42},{48,42}}
down = {{0,0},{16,0},{32,0},{48,0}}
如果不想要globals中的数据,用字符串库转成
return {
left = {{0,63},{16,63},{32,63},{48,63}},
right = {{0,21},{16,21},{32,21},{48,21}},
up = {{0,42},{16,42},{32,42},{48,42}},
down = {{0,0},{16,0},{32,0},{48,0}},
}
在你执行它之前。
如果您坚持要解析该文件,您可以对每一行使用类似这样的内容:
local line = "left = {{0,63},{16,63},{32,63},{48,63}}"
print(line:match("^%w+"))
for num1, num2 in a:gmatch("(%d+),(%d+)") do
print(num1, num2)
end
这应该足以让您入门。当然,您不会打印这些值,而是将它们放入 table.
您好,我正在尝试从文本文件中获取一些数据并将其放入 table。 我不确定如何在做我想做的事情的同时添加多个模式,我知道这个模式本身 %a+ 找到字母而 %b{} 找到括号,但我不确定如何将它们组合在一起以便我找到字母作为键,方括号作为值,并将它们放入我可以使用的 table 中。
文本文件:
left = {{0,63},{16,63},{32,63},{48,63}}
right = {{0,21},{16,21},{32,21},{48,21}}
up = {{0,42},{16,42},{32,42},{48,42}}
down = {{0,0},{16,0},{32,0},{48,0}}
代码:
local function get_animations(file_path)
local animation_table = {}
local file = io.open(file_path,"r")
local contents = file:read("*a")
for k, v in string.gmatch(contents, ("(%a+)=(%b{})")) do -- A gets words and %b{} finds brackets
animation_table[k] = v
print("key : " .. k.. " Value : ".. v)
end
file:close()
结束
get_animations("Sprites/Player/MainPlayer.txt")
这是有效的 Lua 代码,为什么不简单地执行它呢?
left = {{0,63},{16,63},{32,63},{48,63}}
right = {{0,21},{16,21},{32,21},{48,21}}
up = {{0,42},{16,42},{32,42},{48,42}}
down = {{0,0},{16,0},{32,0},{48,0}}
如果不想要globals中的数据,用字符串库转成
return {
left = {{0,63},{16,63},{32,63},{48,63}},
right = {{0,21},{16,21},{32,21},{48,21}},
up = {{0,42},{16,42},{32,42},{48,42}},
down = {{0,0},{16,0},{32,0},{48,0}},
}
在你执行它之前。
如果您坚持要解析该文件,您可以对每一行使用类似这样的内容:
local line = "left = {{0,63},{16,63},{32,63},{48,63}}"
print(line:match("^%w+"))
for num1, num2 in a:gmatch("(%d+),(%d+)") do
print(num1, num2)
end
这应该足以让您入门。当然,您不会打印这些值,而是将它们放入 table.