
Функции сохранения и загрузки параметров с примером использования
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
| function main()
local FPath = getScriptPath()..'//.params'
-- Создание таблицы для примера
local Params = {}
Params.a = 10
Params.b = 'qwerty'
Params.c = true
Params.d = {}
Params.d[1] = 100
Params.d[2] = 'asdfg'
Params.d[3] = false
Params.d[4] = {
['a'] = 10,
['b'] = 'qwerty',
['c'] = true
}
-- Сохраняет таблицу в файл
SaveTable(Params, FPath)
-- Загружает таблицу из файла
local NewParams = LoadTable(FPath)
if NewParams ~= nil then message(NewParams.d[4].b) end -- выведет "qwerty"
end
-- Сохраняет таблицу в файл
SaveTable = function(Table, FilePath)
local Lines = {}
local level = 0
function Rec(a)
local first = true
level = level + 1
local s = '' for i=1,level do s = ' '..s end
for key, val in pairs(a) do
if not first then Lines[#Lines] = Lines[#Lines]..',' end
local k = '[\''..key..'\']'
if type(key) == 'number' then k = '['..key..']' end
if type(val) ~= 'table' then
if type(val) == 'string' then
val = '\''..val..'\''
else
val = tostring(val)
end
table.insert(Lines, s..k..'='..val)
first = false
else
table.insert(Lines, s..k..'={')
first = false
Rec(val)
table.insert(Lines, s..'}')
level = level - 1
end
end
end
table.insert(Lines, 'local a = {')
Rec(Table)
table.insert(Lines, '}')
table.insert(Lines, 'return a')
local f = io.open(FilePath, 'w')
for i=1,#Lines do
f:write(Lines[i]..'\n')
f:flush()
end
f:close()
end
-- Загружает таблицу из файла
LoadTable = function(FilePath)
local func, err = loadfile(FilePath)
if not func then
message('Ошибка загрузки таблицы из файла: '..err)
return nil
else
return func()
end
end |
Данный пример создаст файл ".params" (можно открыть Блокнотом, это обычный текстовый файл, можете назвать его как угодно) со следующим содержимым:
local a = {
['a']=10,
['d']={
[1]=100,
[2]='asdfg',
[3]=false,
[4]={
['a']=10,
['c']=true,
['b']='qwerty'
}
},
['c']=true,
['b']='qwerty'
}
return a
Если у Вас появились какие-то вопросы, задайте их в комментариях под статьей !!!