Встроенная библиотека для работы с 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