码迷,mamicode.com
首页 > 其他好文 > 详细

递归打印lua中的table

时间:2014-08-23 20:14:11      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   os   io   文件   for   ar   div   

递归打印lua中的table,并写到文件里:

  1 local pairs_by_keys = function(inTable)
  2     local temp = {}
  3     for k, v in pairs(inTable) do
  4         temp[#temp + 1] = k
  5     end
  6 
  7     local compare = function(a, b)
  8         if type(a) == type(b) then
  9             return a < b
 10         elseif type(a) == "number" then
 11             return true
 12         else
 13             return false
 14         end
 15     end
 16 
 17     table.sort(temp, compare)
 18 
 19     local i = 0
 20     return function()
 21         i = i + 1
 22         return temp[i], inTable[temp[i]]
 23     end
 24 end
 25 
 26 local get_space_string = function(n)
 27     n = n or 0
 28     return string.rep("    ", n) 
 29 end
 30 
 31 -----------------------------------------------------
 32 local write_table_head = function(tableName, writer)
 33     if writer then
 34         tableName = tableName or "gdTable"
 35         writer("if not(type(" .. tableName .. ") == \"table\") then\n")
 36         writer("    " .. tableName .. " = {}\n")
 37         writer("end\n\n")
 38     end
 39 end
 40 
 41 local function write_table_body(tableName, inTable, writer, deep)
 42     if inTable and writer then
 43         tableName = tableName or "gdTable"
 44         deep = deep or 0
 45 
 46         local space = get_space_string(deep)
 47 
 48         -- head
 49         writer(space .. tableName .. " = {\n")
 50 
 51         -- body
 52         local spaceEx = get_space_string(deep + 1)
 53         for k, v in pairs_by_keys(inTable) do
 54             if type(k) == "number" then
 55                 k = "[" .. k .. "]"
 56             end
 57 
 58             if type(v) == "table" then
 59                 write_table_body(k, v, writer, deep + 1)
 60             elseif type(v) == "string" then
 61                 writer(spaceEx .. k .. " = \"" .. v .. "\",\n")
 62             else
 63                 writer(spaceEx .. k .. " = " .. tostring(v) .. ",\n")
 64             end
 65         end
 66 
 67         -- tail
 68         if deep > 0 then
 69             writer(space .. "},\n")
 70         else
 71             writer(space .. "}\n")
 72         end
 73     end
 74 end
 75 
 76 ----------------------------------------------------------
 77 -- interface
 78 --
 79 write_table = function(inTable, tableName, filePath)
 80     local file = io.open(filePath, "w")
 81     if file then
 82         local writer = function(s)
 83             file:write(s)
 84         end
 85         write_table_head(tableName, writer)
 86         write_table_body(tableName, inTable, writer)
 87         file:close()
 88     end
 89 end
 90 
 91 ----------------------------------------------------------
 92 -- test
 93 --
 94 local test = {
 95     [3] = 3,
 96     [1] = 1,
 97     b = "b",
 98     [2] = 2,
 99     a = "a",
100     sub = {
101         b = true,
102         [1] = "x",
103     },
104 }
105 
106 write_table(test, "test", "out.lua")

 

递归打印lua中的table

标签:style   blog   color   os   io   文件   for   ar   div   

原文地址:http://www.cnblogs.com/jiufangding/p/3931618.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!