Germany | Finland | Saint Petersburg | Drive

Сохранение таблиц Lua в файле

Опубликовано в QLua

Часто возникает необходимость сохранить таблицу Lua в каком-нибудь "надёжном" месте, чтобы впоследствии иметь к ней доступ. Например, при рестарте скрипта. Постановим считать таким надежным местом файл на жестком диске.

Как сохранить?

Стандартные пути: двоичный файл, текстовый фиксированного формата,  формат ini, формат xml. В принципе, использовать можно любой на вкус, а для разбора ini и xml есть готовые расширения Lua.

Я решил использовать другой, гораздо более удобный способ. Сохранить в файле в подавляющем случае требуется некую структуру данных. Для Lua это таблица. На сохранение и восстановление таблицы из файла и будем ориентироваться. 

Используем преобразование таблицы в текстовое представление и сохраняем на диске результаты.

-- Сохранение таблицы или массива в файл
function table.save(tbl,filename)
   local f,err = io.open(filename,"w")
   if not f then
      return nil,err
   end
   f:write(table.tostring(tbl))
   f:close()
   return true
end

В результате на диске мы получим файл, в котором в терминах синтаксика языка Lua описана наша таблица. Зачем сохранять в синтаксисе Lua? Причин две:

  • универсальность
  • элегантный способ чтения таблицы из файла

Вот функция, читающая файл и возвращающая сохранённую в нем таблицу:

-- Чтение таблицы из файла в массива или таблицу
function table.read(filename)
   local f,err = io.open(filename,"r")
   if not f then
      return nil,err
   end
   local tbl = assert(loadstring("return " .. f:read("*a")))
   f:close()
   return tbl()
end

Все просто - читаем файл и запускаем его на выполнение Ангел

Вот как это выглядит:

table.save({11,22,33,{"gh",'jk'},44},"e:\\1.dat")    -- пишем
t = table.read("e:\\1.dat")                                 -- читаем

Аналогичная пара функций для qpile: Файловые операции с массивами и коллекциями

Добавить комментарий


Архив QLua