LUA中的数组转换为字符串

尝试将这个数组转换成字符串 customLog2 = {} 这个数组实际上应该是这个样子的 Log = { {Group = ID, Pos = Numbers}, {Group = ID, Pos = Numbers} } 我尝试了这个

local Data = string.format( "LogBook = %s ", customLog2 )

但是因为CustomLog是一个数组而不是字符串或数字,所以我无法插入它。我想把数组转换为字符串以便于VariableFile:write(Data)。所以如果有人能够帮助那就太棒了,谢谢。

所以我的输出应该像这样"local Data = string.format( "LogBook = %s ", customLog2 )",以便我可以使用:write,然后在我的新创建的文件中它应该像这样Log = { {Group = ID, Pos = Numbers}, {Group = ID, Pos = Numbers} }

所以这个函数可以正常工作,除了一个问题。

function TableSerialization(t, i)
    local text = "{\n"
    local tab = ""
    for n = 1, i + 1 do                                                                 --控制当前文本行的缩进
        tab = tab .. "\t"
    end
    for k,v in pairs(t) do
        if type(k) == "string" then
            text = text .. tab .. "['" .. k .. "'] = "
        else
            text = text .. tab .. "[" .. k .. "] = "
        end
        if type(v) == "string" then
            text = text .. "'" .. v .. "',\n"
        elseif type(v) == "number" then
            text = text .. v .. ",\n"
        elseif type(v) == "table" then
            text = text .. TableSerialization(v, i + 1)
        elseif type(v) == "boolean" then
            if v == true then
                text = text .. "true,\n"
            else
                text = text .. "false,\n"
            end
        elseif type(v) == "function" then
            text = text .. v .. ",\n"
        elseif v == nil then
            text = text .. "nil,\n"
        end
    end
    tab = ""
    for n = 1, i do                                                                     --关闭括号的缩进比前一个文本行少一
        tab = tab .. "\t"
    end
    if i == 0 then
        text = text .. tab .. "}\n"                                                     --最后一个括号后面不应该跟着逗号
    else
        text = text .. tab .. "},\n"                                                    --所有缩进大于0的括号后面都跟着逗号
    end
    return text
end

我的输入数组看起来像这样Log = { Group = WestAPC },但这并不起作用,因为WestAPC不是一个字符串,但如果WestAPC像这样 "WestAPC",那么它就可以工作。我需要它不是字符串形式。

点赞
用户4403144
用户4403144

清楚地说,customLog 是一个表 - 即一种键值对数组。以下是一个遍历所有键值对并将它们连接成一个字符串的简单方法:

s = ""

t = {"a", "b", "c", 123, 456, 789} -- 样例表
t.someKey = "some value" -- 只是一个额外的键值对,以展示键也可以是字符串

for k, v in pairs(t) do
    s = s .. k .. ":" .. v .. "\n" -- 将键值对连接起来,中间用换行符隔开
end

print(s)

当然,如果键的值是另一个表 {},则需要一些额外的逻辑来递归遍历这些嵌套的表。我会留给你作为练习 :)

EDIT 1: 将表格打印为字符串,显示变量的值

s = ""
local ID = 123
local Numbers = 456
local Log = { {Group = ID, Pos = Numbers}, {Group = ID, Pos = Numbers} }

s = s .. "{"
for k, v in next, Log do
    s = s .. "{"

    for vk, vv in next, v do
        if next(v, vk) ~= nil then
            s = s .. vk .. " = " .. vv .. ", "
        else
            s = s .. vk .. " = " .. vv
        end
    end

    if next(Log, k) ~= nil then
        s = s .. "}, "
    else
        s = s .. "}"
    end

end
s = s .. "}"

print(s)

EDIT 2: 将表格打印为字符串,显示变量名

s = ""
local ID = 123
local Numbers = 456
local Log = { {Group = ID, Pos = Numbers}, {Group = ID, Pos = Numbers} }

s = s .. "{"
for k, v in next, Log do
    s = s .. "{"

    i = 1
    for vk, vv in next, v do
        name = debug.getlocal(1, i)
        if next(v, vk) ~= nil then
            s = s .. vk .. " = " .. name .. ", "
        else
            s = s .. vk .. " = " .. name
        end
        i = i + 1
    end

    if next(Log, k) ~= nil then
        s = s .. "}, "
    else
        s = s .. "}"
    end

end
s = s .. "}"

print(s)
2018-06-21 01:23:15