lua:inicfg

Модуль inicfg

Встроенная библиотека для работы с ini-файлами. Позволяет читать и записывать файлы конфигурации в формате ini, реализуется это с помощью двух функций load и save.
Добавлена в v.018.

table data = inicfg.load([table default], [string file])

Функция загружает все параметры из ini-файла и записывает их в таблицу с сохранением иерархии секций, ключей и значений. Имеет два опциональных параметра: первый (default) - задаёт таблицу со значениями по умолчанию, которые будут использованы, если в конфигурационном файле они отсутствуют или отсутствует сам файл; второй - путь к файлу (поиск файла производится в таком порядке: рабочая директория\config\указанный путь.ini → рабочая директория\config\указанный путь → указанный (абсолютный) путь), если путь к файлу не указан, то будет использован рабочая директория\config\имя_файла_скрипта.ini. Возвращает таблицу с данными.

bool result = inicfg.save(table data, [string file])

Записывает таблицу в ini-файл, сохраняя иерархию секция-ключ-значение. Имеет два параметра: data - таблица с секциями и значениями, и опциональный параметр, определяющий путь к файлу (см. выше). Возвращает true, если запись прошла успешно, в противном случае возвращает false.

{
section1 = {key1 = value1, key2 = value2 ...},
section2 = {key3 = value3 ...}
...
}

example.lua:

local inicfg = require 'inicfg'
 
-- производить загрузку кофигов можно и вне 'main'
local mainIni = inicfg.load({
  settings =
  {
    title = "text",
    text_color = "0xAABBCC"
  },
  location = 
  {
    width = 100,
    height = 200,
    pos_x = 20,
    pos_y = 50
  }
}) -- загрузим основной конфиг. путь к файлу не указан, а значит будет загружен файл по пути ./moonloader/config/example.lua.ini
 
function main()
  -- таблица со значениями по умолчаниями не указана, поэтому если файл не удастся прочитать, будет возвращён nil
  local anotherIni = inicfg.load(nil, "example_another_config")
  -- если файл был успешно загружен
  if anotherIni ~= nil then
    -- выводим прочитанные значения
    print("Old value 1 = " .. anotherIni.main.value1)
    print("Old value 2 = " .. anotherIni.main.value2)
    -- просто сгенерируем 2 случайных значения
    local newV1, newV2 = math.random(100, 1000), math.random(100, 1000)
    -- теперь создадим таблицу с новыми значениями
    local newData = {
      main = {
        value1 = newV1,
        value2 = newV2,
        -- и добавим к ним сумму этих двух значений
        sum = newV1 + newV2
      }
    }
    -- можно сохранять
    if inicfg.save(newData, "example_another_config") then
      print("Success.")
    end
  end
 
  -- выведем основной конфиг
  print(mainIni.settings.title .. ", color = " .. mainIni.settings.text_color)
  print("Position: ", mainIni.location.pos_x, mainIni.location.pos_y, "Size: ", mainIni.location.width, mainIni.location.height)
  -- отредактируем и сохраним его
  mainIni.settings.title = "Hello"
  mainIni.location.pos_x = 100
  mainIni.location.pos_y = 75
  inicfg.save(mainIni)
end

В результате выполнения этого кода будет создан файл example.lua.ini, содержащий все значения по умолчанию и изменённые значения title, pos_x, pos_y:

[settings]
title=Hello
text_color=0xAABBCC
[location]
width=100
height=200
pos_x=100
pos_y=75

При условии, что файл 'example_another_config.ini' будет находится в поддиректории 'config', он тоже будет прочитан и обработан - значения 'value1' и 'value2' из секции 'main' будут выведены, а затем будут сгененрированы новые случайные значения, вычислится их сумма и всё это запишется в тот же файл. Результат выйдет примерно такой:

[main]
value1=312
value2=591
sum=903