Модуль inicfg
Встроенная библиотека для работы с ini-файлами. Позволяет читать и записывать файлы конфигурации в формате ini, реализуется это с помощью двух функций load
и save
.
Добавлена в v.018.
inicfg.load
table data = inicfg.load([table default], [string file])
Функция загружает все параметры из ini-файла и записывает их в таблицу с сохранением иерархии секций, ключей и значений. Имеет два опциональных параметра: первый (default) - задаёт таблицу со значениями по умолчанию, которые будут использованы, если в конфигурационном файле они отсутствуют или отсутствует сам файл; второй - путь к файлу (поиск файла производится в таком порядке: рабочая директория\config\указанный путь.ini → рабочая директория\config\указанный путь → указанный (абсолютный) путь), если путь к файлу не указан, то будет использован рабочая директория\config\имя_файла_скрипта.ini. Возвращает таблицу с данными.
inicfg.save
bool result = inicfg.save(table data, [string file])
Записывает таблицу в ini-файл, сохраняя иерархию секция-ключ-значение. Имеет два параметра: data - таблица с секциями и значениями, и опциональный параметр, определяющий путь к файлу (см. выше). Возвращает true
, если запись прошла успешно, в противном случае возвращает false
.
Структура таблицы ini
{ 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