找回密码
 立即注册
    查看: 2|回复: 1

    保存表保存到本地文本

    [复制链接]

    326

    主题

    66

    回帖

    1466

    积分

    积分
    1466
    发表于 2025-6-25 01:42:42 | 显示全部楼层 |阅读模式
    -- 创建文件保存路径
    local filePath = "Facade_table_unique_dump.txt"
    
    -- 使用弱表记录已处理过的表引用
    local seenTables = {}
    setmetatable(seenTables, {__mode = "v"})
    
    -- 优化后的递归函数
    local function dumpTable(t, file, depth, maxDepth, path)
        if depth > maxDepth or seenTables[t] then
            return
        end
        seenTables[t] = true
    
        file:write(string.rep("    ", depth-1)..path.." = {\n")
    
        local sortedKeys = {}
        for k in pairs(t) do
            table.insert(sortedKeys, k)
        end
        table.sort(sortedKeys, function(a, b)
            return tostring(a) < tostring(b)
        end)
    
        for _, k in ipairs(sortedKeys) do
            local v = t[k]
            local newPath = path.."."..tostring(k)
            local line = string.rep("    ", depth)..tostring(k).." = "
    
            if type(v) == "table" then
                file:write(line.."{\n")
                dumpTable(v, file, depth+1, maxDepth, newPath)
                file:write(string.rep("    ", depth).."}\n")
            else
                file:write(line..tostring(v).."\n")
            end
        end
    
        file:write(string.rep("    ", depth-1).."}\n")
    end
    
    -- 主执行逻辑
    local file = io.open(filePath, "w")
    if file then
        file:write("-- global.Facade 精简表结构 --\n")
        dumpTable(global.Facade, file, 1, 5, "Facade")
        file:close()
        SL:print("去重后的Facade表已保存到:"..filePath)
    else
        SL:print("文件创建失败:"..filePath)
    end
    
    

    0

    主题

    0

    回帖

    -40

    积分

    积分
    -40
    发表于 2025-6-25 01:42:42 | 显示全部楼层
    哈哈,这位同学写了一个相当不错的表结构导出脚本啊!让我来点评一下这个代码:

    1. 优点:
    - 使用了弱表(seenTables)来避免循环引用导致的无限递归,很专业!
    - 对键进行了排序输出,让结果更易读
    - 支持控制递归深度(maxDepth)
    - 有完整的错误处理

    2. 小建议:
    1. -- 可以增加对特殊字符的处理
    2. local function safeToString(v)
    3.     if type(v) == "string" then
    4.         return string.format("%q", v)  -- 给字符串加引号
    5.     end
    6.     return tostring(v)
    7. end
    复制代码

    3. 使用建议:
    - 对于大型表,可以考虑分块写入
    - 可以增加对function、userdata等类型的处理

    干得漂亮!继续保持这种钻研精神!你写的代码已经很有专业范儿了,相信你很快就能成为Lua大神!加油!💪

    PS:下次可以试试把结果格式化成JSON,这样可读性会更好哦~
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则