Сохранение параметров скрипта QLua(Lua) между запусками

Автор записи: Дмитрий (Admin)

Блоки кода

Функции сохранения и загрузки параметров с примером использования
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

Если у Вас появились какие-то вопросы, задайте их в комментариях под статьей !!!