]>
Commit | Line | Data |
---|---|---|
1 | function savetable(filename, t) | |
2 | local f = assert(io.open(filename, "w")) | |
3 | ||
4 | f:write("return\n") | |
5 | ||
6 | serialise(f, t) | |
7 | ||
8 | f:close() | |
9 | end | |
10 | ||
11 | function loadtable(filename) | |
12 | local func, err = loadfile(filename) | |
13 | ||
14 | if not func then | |
15 | return nil | |
16 | end | |
17 | ||
18 | return func() | |
19 | end | |
20 | ||
21 | function serialise(f, o) | |
22 | if type(o) == "number" then | |
23 | f:write(o) | |
24 | elseif type(o) == "string" then | |
25 | f:write(string.format("%q", o)) | |
26 | elseif type(o) == "boolean" then | |
27 | if o == true then | |
28 | f:write("true") | |
29 | else | |
30 | f:write("false") | |
31 | end | |
32 | elseif type(o) == "table" then | |
33 | f:write("{\n") | |
34 | for k,v in pairs(o) do | |
35 | f:write(" [") | |
36 | serialise(f, k) | |
37 | f:write("] = ") | |
38 | serialise(f, v) | |
39 | f:write(",\n") | |
40 | end | |
41 | f:write("}\n") | |
42 | elseif type(o) == "nil" then | |
43 | f:write("nil") | |
44 | else | |
45 | error("cannot serialise a " .. type(o)) | |
46 | end | |
47 | end | |
48 | ||
49 | function loadtextfile(file, fn) | |
50 | local f = io.open(file, "r") | |
51 | if not f then | |
52 | return false | |
53 | end | |
54 | ||
55 | while true do | |
56 | local line = f:read() | |
57 | if line == nil then | |
58 | return true | |
59 | end | |
60 | ||
61 | fn(line) | |
62 | end | |
63 | end |