【问题标题】:splitting lua strings into variables将lua字符串拆分为变量
【发布时间】:2018-04-04 21:17:45
【问题描述】:

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

我正在编程灯光,我喜欢做的是从我的灯光台上获取一个变量(一个名为“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+')

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

致以诚挚的问候,

马丁

【问题讨论】:

    标签: lua dmx512


    【解决方案1】:

    你可以同时赋值所有三个变量,因为 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(变量)中搜索。

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

    【讨论】:

    • 是的,它奏效了。惊人的。感谢您的快速响应 Cyclaminist
    • 使用%s 而不是[ \t]
    • 我想%s 更好。我不想匹配换行符(尽管在给出的示例中这无关紧要)。
    【解决方案2】:

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

    local number, fixturetype, location = string.match(Layer1, '(%S+)%s+(%S+)%s+(%S+)')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-30
      • 2019-02-05
      • 2015-01-16
      • 1970-01-01
      • 1970-01-01
      • 2011-04-01
      • 1970-01-01
      相关资源
      最近更新 更多