Инклуд MxINI
Что это такое? Для чего он требуется? Это инклуд, содержащий функции для чтения/записи файлов.
Чем он вам пригодиться?
Любая строка не имеющая символа "=" будет считаться комментарием;
Вокруг ключа, символа "=" и до зачения ключа может быть любое кол-во пробелов;
Нет лимитов на длину ключа и его значения;
Поддержка всех символов(в том числе и кирилице) в названии файла, ключе и его значении, кроме "\r" и "\n";
Одна строка может содержать любое кол-во пар ключ/значение;
Пример:
PHP код:
а = б = в
эта строка фактически содержит след. ключи и значения:
"а" = "б"
"а = б" = "в"
"а" = "б = в"
"б" = "в"
Скорость
Перед тем как читать что-то из файла, его также как и остальные файлы нужно открыть. При открытии весь файл копируется в ОЗУ вместе с именем. Остальные операции чтения/записи производятся непосредственно в ОЗУ. Именно поэтому все это происходит очень быстро. Если контент файла в ОЗУ был изменен, при закрытии он будет записан на диск.
Используется сжатое хранение контента файла, что в 4 раза меньше, чем обычный формат(в обычной строке для 1 символа отводится 4 байта, в сжатой строке 1 символ занимает всего 1 байт). Скорость также достигается за счет отсутствия дополнительных функций, которые могли бы использоваться в функциях чтения/записи, а также за счет использования только встроенных функций скриптинга.
Функции инклуда
Создание файла:
PHP код:
ini_createFile("адрес/файла.ini", "Содержимое файла по умолчанию");
//или
ini_createFile("адрес/файла.ini");
//создаст файл если его нету, иначе вернет код ошибки
Открытие файла:
PHP код:
ini_openFile("путь/к/файлу.ini");//откроет файл если он сущ-ет, иначе вернет код ошибки
Закрытие/сохранение файла:
PHP код:
ini_closeFile(ID_открытого_файла);
Запись текста в файл:
PHP код:
ini_setString(ID_открытого_файла, "имя ключа", "текстовое значение");
Запись числа в файл:
PHP код:
ini_setInteger(ID_открытого_файла, "имя ключа", 123456);
Запись float значения в файл:
PHP код:
ini_setFloat(ID_открытого_файла, "имя ключа", 3.1416);
Чтение текста из файла:
PHP код:
ini_getString(ID_открытого_файла, "имя ключа", returnValue);
Чтение числа из файла:
PHP код:
ini_getInteger(ID_открытого_файла, "имя ключа", returnValue);
Чтение float значения из файла:
PHP код:
ini_getFloat(ID_открытого_файла, "имя ключа", returnValue);
Удаление ключа из файла:
PHP код:
ini_removeKey(ID_открытого_файла, "имя ключа");
Вернуть код ошибки:
PHP код:
ini_removeKey(ID_открытого_файла, "имя ключа");
Доп. Функции, потребующиеся для работы (DEFAULT):
Проверка на существование файла:
PHP код:
fexist("адрес/файла.ini");
Удаление файла:
PHP код:
fremove("адрес/файла.ini");
Также можно добавить пару дефайнов:
PHP код:
#define ini_existFile fexist
#define ini_removeFile fremove
Для удобства использования, например:
PHP код:
ini_existFile("адрес/файла.ini");//Проверка на существование файла
ini_removeFile("адрес/файла.ini");//Удаление файла
Дополнительные нестандартные функции которые могут пригодиться (DEFAULT):
PHP код:
#define ini_setBool(%1,%2,%3) %3?ini_setInteger(%1,%2,1):ini_setInteger(%1,%2,0)
stock ini_getBool(fileID,key[],&bool:Value)
{
new testint;
ini_getInteger(fileID,key,testint);
if(testint == 0) Value = false;
else Value = true;
return true;
}
C помощью этих функций вы сможете записать/прочитать из файла бинарные значения(true & false).
Пример:
PHP код:
new file = ini_createFile("тест_инклуда.ini");
new returnString[32], returnNumber, Float: returnFloat;
ini_setString(file, "ключ со строкой", "текстовое значение");
ini_setInteger(file, "ключ с числом", 123456);
ini_setFloat(file, "ключ с дробью", 3.1416);
ini_getString(file, "ключ со строкой", returnString);
ini_getInteger(file, "ключ с числом", returnNumber);
ini_getFloat(file, "ключ с дробью", returnFloat);
ini_closeFile(file);
printf ( "\n `ключ_со_строкой` = `%s`,\n `ключ_с_числом` = `%d`,\n `ключ_с_дробью` = `%f` \n",
returnString, returnNumber, returnFloat);
Регистрация с помощью mxINI:
PHP код:
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/mycommand", cmdtext, true, 10) == 0)
{
return 1;
}
if(strcmp( cmdtext, "/register", true, 9) == 0)// если игрок ввел в чате /register
{
new FileName[30];GetPlayerName(playerid, FileName, 30);// узнаем ник игрока
format(FileName, 30, "%s.ini", FileName);
if(fexist(FileName)) return SendClientMessage(playerid, 0xFF00000AA, " * Этот аккаунт уже зарегистрирован! Выбери другой ник.");// если файл для этого ника уже существует
if(cmdtext[9] == 0 || cmdtext[10] == 0) return SendClientMessage(playerid, 0xFF00000AA, " * Не указан пароль! Формат: /register пароль");// если не указан пароль
new File = ini_createFile(FileName);// создадим файл с именем игрока
if (File >= 0) // если файл создан
{
ini_setString(File, "Пароль", cmdtext[10]);
ini_closeFile(File);
SendClientMessage( playerid, 0x00FF00AA, " * Аккаунт успешно зарегистрирован! Используй /login, чтобы войти в него." );
return 1;
}else{
// если не удалось создать файл
SendClientMessage( playerid, 0xFF00000AA, " * Не удалось создать файл для аккаунта! Попробуй еще раз. " );
printf("%s", ini_getErrorInfo(File));//выведем описание ошибки в лог
return 1;
}
}
if(strcmp( cmdtext, "/login", true, 6) == 0)// если игрок ввел в чате /register
{
new FileName[30];GetPlayerName(playerid, FileName, 30);// узнаем ник игрока
format(FileName, 30, "%s.ini", FileName);
if(!fexist(FileName)) return SendClientMessage(playerid, 0xFF00000AA, " * Этот аккаунт не зарегистрирован! Введите /register пароль.");// если файл для этого ника не существует
if(cmdtext[6] == 0 || cmdtext[7] == 0) return SendClientMessage(playerid, 0xFF00000AA, " * Не указан пароль! Формат: /login пароль");// если не указан пароль
new File = ini_openFile(FileName);// откроем файл с именем игрока
ini_getString(File, "Пароль", FileName);
ini_closeFile(File);
if(strcmp(cmdtext[7], FileName, true, 10) == 0)
{
SendClientMessage( playerid, 0x00FF00AA, " * Вы успешно вошли.");
}else return SendClientMessage(playerid, 0xFF00000AA, " * Не верный пароль!");
}
return 0;
}
Как проводились тесты? Тест скорости между инклудами (Dini VS Fini VS MxINI):
Каждой библиотеке нужно будет создать и открыть INI файл, записать в него 100 ключей, прочесть значения этих ключей, закрыть файл. Для точных показаний, тест проходит 5 раз подряд.
<Ссылки на скачивание временно удалены. \\DC>