Lua基础:数据文件与持久化

Data文件

  1. Entry{"Donald E. Knuth", 
  2. "Literate Programming", 
  3. "CSLI", 
  4. 1992} 
  5. Entry{"Jon Bentley", 
  6. "More Programming Pearls", 
  7. "Addison-Wesley", 
  8. 1990} 

读取文件数据:

  1. local count=0
  2. function Entry(b)
  3.     count=count+1
  4. end
  5. dofile("oo.lua")
  6. print("number of entries:" .. count)
  7. -----------------------------------------------
  8. local authors={}
  9. function Entry(b)
  10.     authors[b[1]]=true
  11. end
  12. dofile("oo.lua")
  13. for name in pairs(authors) do
  14.     print(name)
  15. end

序列化:将数据转换为字节流或者字符流

  1. o={a=12,b="Lua",key="another one"}
  2.  
  3. function serialize(o)                      --序列化serialize
  4.     if type(o)=="number" then            --number类型
  5.         io.write(o)
  6.     elseif type(o)=="string" then       --string类型
  7.         io.write(string.format("%q",o))
  8.     elseif type(o)=="table" then        --table类型
  9.         for k,v in pairs(o) do
  10.             io.write("[",k,"=")
  11.             serialize(v)
  12.             io.write("]\n")
  13.         end
  14.         io.write("\n")
  15.     else
  16.         error("cannot serialize a " .. type(o))
  17.     end
  18. end
  19.  
  20. serialize(o)
  21. ----------------------------------------------------------------------
  22. function basicSerialize(o)
  23.     if type(o)=="number" then
  24.         return tostring(o)
  25.     else
  26.         return string.format("%q",o)
  27.     end
  28. end
  29.  
  30. function save(name,value,saved)
  31.     saved=saved or {}
  32.     io.write(name,"=")
  33.     if type(value)=="number" or type(value)=="string" then
  34.         io.write(basicSerialize(value),"\n")
  35.     elseif    type(value)=="table" then
  36.         if saved[value] then
  37.             io.write(saved[value],"\n")
  38.         else
  39.             saved[value]=name
  40.             io.write("{}\n")
  41.             for k,v in pairs(value) do
  42.                 local filedname=string.format("%s[%s]",name,basicSerialize(k))
  43.                 save(filedname,v,saved)
  44.             end
  45.         end
  46.     else
  47.         error("cannot save a " .. type(value))
  48.     end
  49. end
  50.  
  51. a={x=1,y=2;{3,4,5}}
  52. a[2]=a
  53. a.z=a[1]
  54.  
  55. save('a',a,t)
  56.  
  57. a={{"one","two"},3}
  58. b={k=a[1]}
  59.  
  60. local t={}
  61. save('a',a,t)
  62. save('b',b,t)

猜你喜欢

转载自blog.csdn.net/QQhelphelp/article/details/88076064