lua 读、写文件基本操作实例(二)

来源:互联网 发布:人机大战与网络象棋 编辑:程序博客网 时间:2024/05/19 18:13
--[[dofile("./data.txt")
print(HERO)
print(cha[1].basic.Name)


function SaveTableContent(file, obj ,t)  --保存表
      local szType = type(obj) 
      print(szType)  
      if szType == "number" then  
            file:write(obj)  
      elseif szType == "string" then 


            if t == "key" then
                  file:write(obj)
            else
                  file:write(string.format("%q", obj))
            end 
            
           
      elseif szType == "table" then  
            --把table的内容格式化写入文件  
            file:write("{\n") 
            for i, v in pairs(obj) do  
                  --file:write("")
                  t = "key"
                  SaveTableContent(file, i,t)  
                  file:write("=")
                  t = "value"
                  SaveTableContent(file, v,t) 
                  file:write(", \n")
             end  
            file:write("}\n")
      else  
            error("can't serialize a ".. szType) 
      end  
end  
 
function SaveTable()  
      HERO = 2
      local file = io.open("data.txt", "w") --打开
      assert(file)  --是否获得文件句柄
      file:write("HERO=")
      file:write(HERO)
      file:write("\n")
      file:write("cha = {}\n")  
      file:write("cha[1] = \n")  
      SaveTableContent(file, cha[1],nil)  
      file:close()--关闭  
end  
 
--SaveTable()]]
function serialize(obj)  
    local lua = ""  
    local t = type(obj)  
    if t == "number" then  
        lua = lua .. obj  
    elseif t == "boolean" then  
        lua = lua .. tostring(obj)  
    elseif t == "string" then  
        lua = lua .. string.format("%q", obj)  
    elseif t == "table" then  
        lua = lua .. "{\n"  
    for k, v in pairs(obj) do  
        lua = lua .. "[" .. serialize(k) .. "]=" .. serialize(v) .. ",\n"  
    end  
    local metatable = getmetatable(obj)  
        if metatable ~= nil and type(metatable.__index) == "table" then  
        for k, v in pairs(metatable.__index) do  
            lua = lua .. "[" .. serialize(k) .. "]=" .. serialize(v) .. ",\n"  
        end  
    end  
        lua = lua .. "}"  
    elseif t == "nil" then  
        return nil  
    else  
        error("can not serialize a " .. t .. " type.")  
    end  
    return lua  
end  
  
function unserialize(lua)  
    local t = type(lua)  
    if t == "nil" or lua == "" then  
        return nil  
    elseif t == "number" or t == "string" or t == "boolean" then  
        lua = tostring(lua)  
    else  
        error("can not unserialize a " .. t .. " type.")  
    end  
    lua = "return " .. lua  
    local func = loadstring(lua)  
    if func == nil then  
        return nil  
    end  
    return func()  
end  


function write_content( fileName,content )
local f = assert(io.open(fileName, 'w'))
f:write(content)
f:close()
end

data = {["a"] = "a", ["b"] = "b", [1] = 1, [2] = 2, ["t"] = {1, 2, 3}}  
local sz = serialize(data)  
print(sz) 
print(type(sz)) 
write_content("test.txt",sz)


function getFile(file_name)
  local f = assert(io.open(file_name, 'r'))
  local string = f:read("*all")
  f:close()
  return string
end


local str=getFile("test.txt")
print("---------")  
print(str)
print("******************")
print(unserialize(str))  
print(type(unserialize(sz)))
for k,v in pairs(unserialize(str)) do
      print(k,v)
end
0 0
原创粉丝点击