如何使用循环将字符串连接成一个字符串?

3

我需要帮助解决字符串合并的问题。我从寄存器中读取数据,使用utf(regAddr, length)函数。我得到了一个包含十进制数的表格,然后在循环中将其转换为十六进制数并转换为字符串。我需要将这些字符串连接成一个字符串。在Lua中没有像 .= 操作符。

function utf(regAddr, length)
  stringTable = {} 
  table.insert(stringTable, {mb:readregisters(regAddr-1,length)})

  for key, value in pairs(stringTable) do
    for i=1, length do
      v = value[i]
      v = lmcore.inttohex(v, 4)
      v = cnv.hextostr(v)   
      log(v)
    end  
  end
end

-- function(regAddr, length)
utf(30,20)

enter image description here


为什么你要为每个项目将一个表格插入到stringTable中,而不是使用table.insert(stringTable, mb:readregisters(regAddr-1,length)) - Oliver
你好, 我只在stringTable中插入一次表格,而不是在循环中。我也可以将此寄存器读取为value1、value2、value3等,最多20个值= mb:readregisters(regAddr-1,20)但我认为最好的方法是使用表格和循环。我不想有20个变量。我需要通过表格进行迭代,并对表格中的每个变量使用lmcore.inttohex和cnv.hextostr来获取ASCII字符串。最终文本必须在一个变量中为“Power Meter”。 - user3159120
3个回答

7
没有字符串的追加运算符。字符串是不可变的值。 .. 运算符将两个字符串连接起来,生成一个新的字符串作为结果。
local b = "con"
local c = "catenate"
local a = b .. c  -- "concatenate"
函数可以将表中的字符串连接起来,生成一个字符串结果:
local t = { "con", "catenate" }
local a = table.concat(t)  -- "concatenate"

local t = { "two", "words" }
local a = table.concat(t, " ") -- "two words"

string.format 函数接受一个格式模板和一组兼容的值,生成一个字符串结果:

local b = 2
local c = "words"
local a = string.format("%i %s", b, c)  -- "2 words"

local t = { 2, "words" }
local a = string.format("%i %s", unpack(t))  -- "2 words"

如果您需要累积大量字符串并最终想要将它们连接起来,您可以使用表格作为临时数据结构,并在累积完成后进行连接:

local t = {}
for i = 1, 1000 do
    table.insert(t, tostring(i))
end
local a = table.concat(t) -- "1234...9991000"

针对大量字符串的情况,您可以逐步拼接。请参阅LTN 9:逐个创建字符串及相关讨论。


非常感谢Tom,你最后的代码很好地解决了我的问题。 - user3159120

3

嗨, 我试过这个函数,但对于函数lmcore.inttohex和cnv.hextostr,我需要数字而不是表格。 在循环中使用某种追加运算符似乎是解决方案,但我不确定如何做。 - user3159120

0

这段代码是有效的:

function utf(regAddr, length)
    stringTable = {}
    table.insert(stringTable, {mb:readregisters(regAddr-1,length)})

    for key, value in pairs(stringTable) do
        t = {}

        for i=1, length do
            v = value[i]
            v = lmcore.inttohex(v, 4)
            v = cnv.hextostr(v)

            table.insert(t, v)
        end
        a = table.concat(t)

    end

end

-- function(regAddr, length)
utf(30,20)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接