如何在Lua(CC:Tweaked)中将字符串转为table?及无中间件存表方案
解决CC:Tweaked中Lua字符串转Table及直接存Table到文件的问题
一、把读取到的字符串转成Table
你的字符串是标准的Lua Table语法格式,直接用load函数就能完成转换,代码非常简单:
local str = '{a="foo", b="bar", c=12345}' -- 加载字符串并执行,返回对应的table local myTable = load("return " .. str)() -- 测试输出验证结果 print(myTable.a) -- 输出foo print(myTable.c) -- 输出12345
注意:如果这个字符串是你自己生成的文件内容,用这个方法完全安全;如果是外部未知来源的字符串,需要警惕安全风险,但你的场景下不用顾虑。
二、直接把Table保存到文件(简化中间步骤)
本质上还是需要把Table转成可存储的字符串,但可以写个极简的序列化函数,直接将Table转成Lua格式的字符串写入文件,读取时再用上面的方法转回Table,全程不用手动处理字符串中间件。
适配简单Table的序列化函数(支持字符串、数字、布尔值)
-- 序列化简单table(仅处理字符串/数字/布尔值键值对,无嵌套table) function serialize(tbl) local parts = {} for k, v in pairs(tbl) do -- 处理键的格式 local keyStr = type(k) == "string" and (k .. "=") or ("[" .. k .. "]=") -- 处理值的格式 local valStr if type(v) == "string" then valStr = '"' .. v .. '"' else valStr = tostring(v) end table.insert(parts, keyStr .. valStr) end return "{" .. table.concat(parts, ", ") .. "}" end -- 保存table到文件 local myTable = {a="foo", b="bar", c=12345} local file = fs.open("my_table.txt", "w") file.write(serialize(myTable)) file.close() -- 从文件读取并转回table local file = fs.open("my_table.txt", "r") local str = file.readAll() file.close() local loadedTable = load("return " .. str)()
这个函数完全适配你的需求场景,没有复杂逻辑,初学者能轻松看懂和使用。
内容的提问来源于stack exchange,提问作者Larix Duk
相关产品推荐
相关产品推荐

