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 |
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
local a = { ['a']=10, ['d']={ [1]=100, [2]='asdfg', [3]=false, [4]={ ['a']=10, ['c']=true, ['b']='qwerty' } }, ['c']=true, ['b']='qwerty' } return a
Если у Вас появились какие-то вопросы, задайте их в комментариях под статьей !!!