Версия: Stable
Обновления:
Beta:
- первый релиз
Stable:
- Исправление багов (спасибо пользователю Ronna Riva)
- Добавлена поддержка файлов без блоков
Описание: Данный заголовочный файл представляет собой функции для упрощения обработки информации из INI файлов.
Доступные функции:
- Код: Выделить всё
//инициализация (обработка) файла
//возвращает идентификатор файла
//dir - путь к обрабатываемому файлу
stock UTIL_ParserLoadFile(const dir[]);
//функция возвращает кол-во строк в указанном блоке или в файле, если нет блоков
//handle - идентификатор файла
//section - необходимый блок в файле, указывается в квадратных скобках, к примеру [MAIN]
stock UTIL_ParserGetLines(const handle, const section[] = "default");
//функция получает содержимое указанной строки в блоке/файле
//(нумерация строк в каждом блоке индивидуальна, а не равна общему числу строк во всем файле)
//handle - идентификатор файла
//line - номер строки
//output - массив для записи строки
//размер массива
//section - необходимый блок в файле, пропустить, если в файле нет блоков
stock UTIL_ParserGetContent(const handle, const line, output[], const size, const section[] = "default");
//запускает обработку строк с вызовом в указанную функцию
//handle - идентификатор файла
//function - функция, которая будет получать содержимое строки
//section - необходимый блок в файле, пропустить, если в файле нет блоков
stock UTIL_ParserGetContentOnHandle(const handle, const function[], const section[] = "default");
Задача для примера: У нас есть INI файл с блоком [MAPS], который содержит в себе список карт, на которых плагин не функционирует.
- Код: Выделить всё
[MAPS]
de_dust
de_dust2
de_dust2_2x2
de_inferno
Реализация 1:
- Код: Выделить всё
#include <amxmisc>
#include <util_parser>
#pragma semicolon 1
#define PLUGIN "UTIL Parser: Stub plugin"
#define VERSION "1.0"
#define AUTHOR "sa1me AKA Eriurias"
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
new szTempString[64], szBuffer[32];
get_configsdir(szTempString, charsmax(szTempString));
add(szTempString, charsmax(szTempString), "/testconfig.ini");
new iParserHandle = UTIL_ParserLoadFile(szTempString);
get_mapname(szTempString, charsmax(szTempString));
for (new i; i < UTIL_ParserGetLines(iParserHandle, "[MAPS]"); i++)
{
UTIL_ParserGetContent(iParserHandle, i, szBuffer, charsmax(szBuffer), "[MAPS]");
if (equal(szBuffer, szTempString))
{
pause("d");
break;
}
}
}
Реализация 2:
- Код: Выделить всё
#include <amxmisc>
#include <util_parser>
#pragma semicolon 1
#define PLUGIN "UTIL Parser: Stub plugin"
#define VERSION "1.0"
#define AUTHOR "sa1me AKA Eriurias"
new g_iParserHandle;
new g_szMapName[32];
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
new szConfig[64];
get_configsdir(szConfig, charsmax(szConfig));
add(szConfig, charsmax(szConfig), "/testconfig.ini");
g_iParserHandle = UTIL_ParserLoadFile(szConfig);
get_mapname(g_szMapName, charsmax(g_szMapName));
UTIL_ParserGetContentOnHandle(g_iParserHandle, "MapsSection", "[MAPS]");
}
public MapsSection(const buffer[])
{
if (equal(buffer, g_szMapName))
{
pause("d");
return PARSER_BREAK;
}
return PARSER_CONTINUE;
}
TODO: Реализовать функции для обработки полученных строк, а также возможность получать строку в обработчик уже по готовым аргументам.