2014-02-14 65 views
2

有人可以幫我解決字符串連接問題。我從寄存器讀取數據。它的功能是utf(regAddr,長度)。我得到十進制數字的表格,然後將其轉換爲十六進制,並將其轉換爲循環字符串。我需要將這些字符串連接成一個。 沒有在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

+0

爲什麼你插入一個表格到STRINGTABLE每個項目,爲什麼不'table.insert(STRINGTABLE,MB:readregisters(regAddr-1,長度))'? – Schollii

+0

你好, 我只能在stringTable中插入一次表。它不在循環中。我也可以讀取該寄存器爲 值1,值2,值3,...,value20 = MB:readregisters(regAddr-1,20) 但我覺得更好的是有桌子和循環工作。我不想有20個變量。 我需要迭代通過表和表中的每個變量使用lmcore.inttohex和cnv.hextostr來獲取ASCII字符串。最終文本必須是「Power Meter」中的一個變量。 – user3159120

回答

4

沒有爲字符串沒有追加操作。字符串是不變的值。

..操作連接兩個串,產生第三串作爲結果:

local b = "con" 
local c = "catenate" 
local a = b .. c -- "concatenate" 

table.concat功能連接字符串在表,產生一個字符串結果:

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: Creating Strings Piece by Piece及相關討論。

+0

非常感謝Tom,您的最後一段代碼運行良好並且幫助我 – 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) 
相關問題