1

我对此很陌生,所以我希望你能帮帮我。

我正在对灯光进行编程,我喜欢做的是从我的灯光台上获取一个变量(一个名为“4 Mythos Stage”的文本字符串)并将其拆分为不同的变量。

从我使用的桌子上获取变量:

return function ()
local Layer1 = gma.user.getvar("Layer1") -- I placed "4 Mythos Stage" variable in Layer1
gma.feedback(Layer1) -- gives feedback 4 Mythos Stage
end

现在我想将字符串拆分为 3 个新的局部变量,名为:

local number -- should produce 4
local fixturetype -- should produce Mythos
local location -- should produce Stage

我尝试了以下方法:

local number = string.match('Layer1', '%d+')
local fixturetype = string.match('Layer1', '%a+')
local location = string.match('Layer1', '%a+')

这不起作用,所以有人可以帮助我朝着正确的方向前进。我会非常感激的。

亲切的问候,

马汀

4

2 回答 2

3

您可以同时分配所有三个变量,因为 Lua 有多个返回和多个赋值。在每个模式周围加上括号,以便将它们作为捕获返回,并将它们组合成一个模式,它们之间有空格:

local number, fixturetype, location = string.match(Layer1, '(%d+) (%a+) (%a+)')

如果您将在项目之间使用多个空格或制表符,则此模式会更好:

local number, fixturetype, location = string.match(Layer1, '(%d+)[ \t]+(%a+)[ \t]+(%a+)')

您的尝试不起作用的原因string.match('Layer1', '%d+')是在'Layer1'(字符串)而不是Layer1(变量)内部搜索。

但即使你纠正了这一点,你'Mythos'每次打电话都会得到string.match(Layer1, '%a+')(where Layer1 == '4 Mythos Stage')。string.match总是从字符串的开头开始,除非您在第三个参数中提供索引:string.match(Layer1, '%a+', 9) --> 'Stage'.

于 2018-04-04T22:11:48.553 回答
1

此任务的一个可靠解决方案是将字符串拆分为三个“单词”,一个单词是一系列非空白字符:

local number, fixturetype, location = string.match(Layer1, '(%S+)%s+(%S+)%s+(%S+)')
于 2018-04-05T00:49:23.340 回答