Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 11

Тема: MxINI

  1. #1
    Аватар для Dima_Turkow
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.12.2013
    Адрес
    Екатеринбург
    Сообщений
    124
    Репутация:
    8 ±

    MxINI

    Инклуд 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 == 0Value false;  
    else 
    Value true;  
    return 
    true;  

    C помощью этих функций вы сможете записать/прочитать из файла бинарные значения(true & false).
    Пример:
    PHP код:
    new file ini_createFile("тест_инклуда.ini");  
        new 
    returnString[32], returnNumberFloatreturnFloat;  

        
    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",  
            
    returnStringreturnNumberreturnFloat); 
    Регистрация с помощью mxINI:
    PHP код:
    public OnPlayerCommandText(playeridcmdtext[])  
    {  
        if (
    strcmp("/mycommand"cmdtexttrue10) == 0)  
        {  
            return 
    1;  
        }  
        if(
    strcmpcmdtext"/register"true9) == 0)// если игрок ввел в чате /register  
        
    {  
            new 
    FileName[30];GetPlayerName(playeridFileName30);// узнаем ник игрока  
            
    format(FileName30"%s.ini"FileName);  

            if(
    fexist(FileName)) return SendClientMessage(playerid0xFF00000AA" * Этот аккаунт уже зарегистрирован! Выбери другой ник.");// если файл для этого ника уже существует  
            
    if(cmdtext[9] == || cmdtext[10] == 0) return SendClientMessage(playerid0xFF00000AA" * Не указан пароль! Формат: /register пароль");// если не указан пароль  

            
    new File ini_createFile(FileName);// создадим файл с именем игрока  

            
    if (File >= 0// если файл создан  
            
    {  
                
    ini_setString(File"Пароль"cmdtext[10]);  
                
    ini_closeFile(File);  
                
    SendClientMessageplayerid0x00FF00AA" * Аккаунт успешно зарегистрирован! Используй /login, чтобы войти в него." );  
                return 
    1;  
            }else{  
                
    // если не удалось создать файл  
                
    SendClientMessageplayerid0xFF00000AA" * Не удалось создать файл для аккаунта! Попробуй еще раз. " );  
                
    printf("%s"ini_getErrorInfo(File));//выведем описание ошибки в лог  
                
    return 1;  
            }  
        }  
        if(
    strcmpcmdtext"/login"true6) == 0)// если игрок ввел в чате /register  
        
    {  
            new 
    FileName[30];GetPlayerName(playeridFileName30);// узнаем ник игрока  
            
    format(FileName30"%s.ini"FileName);  

            if(!
    fexist(FileName)) return SendClientMessage(playerid0xFF00000AA" * Этот аккаунт не зарегистрирован! Введите /register пароль.");// если файл для этого ника не существует  
            
    if(cmdtext[6] == || cmdtext[7] == 0) return SendClientMessage(playerid0xFF00000AA" * Не указан пароль! Формат: /login пароль");// если не указан пароль  

            
    new File ini_openFile(FileName);// откроем файл с именем игрока  
            
    ini_getString(File"Пароль"FileName);  
            
    ini_closeFile(File);  
            if(
    strcmp(cmdtext[7], FileNametrue10) == 0)  
            {  
                
    SendClientMessageplayerid0x00FF00AA" * Вы успешно вошли.");  
            }else return 
    SendClientMessage(playerid0xFF00000AA" * Не верный пароль!");  
        }  
        return 
    0;  

     Как проводились тесты?
    Тест скорости между инклудами (Dini VS Fini VS MxINI):
    Каждой библиотеке нужно будет создать и открыть INI файл, записать в него 100 ключей, прочесть значения этих ключей, закрыть файл. Для точных показаний, тест проходит 5 раз подряд.



     Вот результаты:
    Все показания в миллисекундах (1 секунда = 1000 миллисекунд (ms)




    <Ссылки на скачивание временно удалены. \\DC>
    Последний раз редактировалось Daniel_Cortez; 10.07.2016 в 15:28. Причина: -

  2. #2
    Аватар для TWIX
    Пользователь

    Статус
    Оффлайн
    Регистрация
    29.10.2013
    Сообщений
    100
    Репутация:
    41 ±
    Перемещено!

    По теме полезно!
    Уважаю данных Людей:

    1. Osetin(Хороший Администратор)
    2.Daniel_Cortez(Классный скриптер)
    3.Londlem(Офигенный скриптер)
    4.#Carleone(Просто хороший человек)

  3. Пользователь сказал cпасибо:
    Dima_Turkow (05.01.2014)
  4. #3
    Аватар для Dima_Turkow
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.12.2013
    Адрес
    Екатеринбург
    Сообщений
    124
    Репутация:
    8 ±
    Спасибо )

  5. #4
    Аватар для Salvacore
    Инжунер-погромист

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Адрес
    Аҧсуа бызшәа
    Сообщений
    2,271
    Репутация:
    418 ±
    Update.

  6. #5
    Аватар для bred
    Пользователь

    Статус
    Оффлайн
    Регистрация
    28.04.2014
    Адрес
    Moscow
    Сообщений
    45
    Репутация:
    12 ±
    Посты набиваем?

  7. #6
    Аватар для Salvacore
    Инжунер-погромист

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Адрес
    Аҧсуа бызшәа
    Сообщений
    2,271
    Репутация:
    418 ±
    Цитата Сообщение от bred Посмотреть сообщение
    Посты набиваем?
    Раздел оформляем, перезаливаем, редактируем чужие фейлы.

  8. #7
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,474
    Репутация:
    1930 ±
    1)
    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 <= 0Value false;//false - нуль. Все значения, отличные от нуля - true.
        
    else Value true;  
        return 
    true;  

    2) Тема оформлена странно. Особенно если на тёмном стиле смотреть...
    Связаться со мной в VK можно через личные сообщения этой группы

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  9. #8
    Аватар для Salvacore
    Инжунер-погромист

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Адрес
    Аҧсуа бызшәа
    Сообщений
    2,271
    Репутация:
    418 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    1)
    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 <= 0Value false;//false - нуль. Все значения, отличные от нуля - true.
        
    else Value true;  
        return 
    true;  

    2) Тема оформлена странно. Особенно если на тёмном стиле смотреть...
    Тогда не было тёмного стиля.

  10. #9
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,474
    Репутация:
    1930 ±
    Таки измените <= на "=="
    Связаться со мной в VK можно через личные сообщения этой группы

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  11. #10
    Аватар для Dima_Turkow
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.12.2013
    Адрес
    Екатеринбург
    Сообщений
    124
    Репутация:
    8 ±
    Update

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •