root/lang/lua/misc/INI.lua @ 19737

Revision 234, 1.2 kB (checked in by cho45, 7 years ago)

lua,
lua/misc,
lua/misc/INI.lua,
lua/misc/t-sandbox.lua,
lua/misc/Test.lua,
lua/misc/t-ini.lua,
lua/misc/Class.lua,
lua/misc/t-class.lua,
lua/misc/List.lua,
lua/misc/t-list.lua,
lua/misc/SandBox.lua:

Lua の簡単なライブラリ

Line 
1--[[
2INI class
3===========
4
5DESCRIPTION
6-----------
7
8ini ファイルを読み書きするためのクラス
9
10SINOPSYS
11--------
12
13
14        INI.new({
15                SectionName = {
16                        key = "value"
17                }
18        }):write("hoge.ini")
19
20        ini = INI.new():read("hoge.ini")
21        ini.SectionName.key
22
23NOTE
24----
25
26書きこみの際は順番が保持されません。
27
28]]
29
30
31require "Class"
32
33INI = Class {
34        initialize = function (self, table)
35                if table then
36                        for i, v in pairs(table) do
37                                i = tostring(i)
38                                self[i] = {}
39                                for j, w in pairs(v) do
40                                        self[i][j] = tostring(w)
41                                end
42                        end
43                end
44        end,
45
46        read = function (self, filename)
47                local sect  = nil
48                local name  = nil
49                for line in io.lines(filename) do
50                        line = string.gsub(line, "%s*;.*", "")
51                        s, e, n  = string.find(line, "%[(.+)%]")
52                        if s then
53                                if sect then self[name] = sect end
54                                name = n
55                                sect = {}
56                        else
57                                s, e, k, v = string.find(line, "(%w+)=(.*)")
58                                if s then
59                                        sect[k] = v
60                                end
61                        end
62                end
63                if sect then self[name] = sect end
64                return self
65        end,
66
67        write = function (self, filename)
68                local f = io.open(filename, "w")
69                for i, v in pairs(self) do
70                        f:write(string.format("[%s]\n", i))
71                        for j, w in pairs(v) do
72                                f:write(string.format("%s=%s\n", j, w))
73                        end
74                        f:write("\n")
75                end
76                f:close()
77        end,
78}
79
80
Note: See TracBrowser for help on using the browser.