Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.

Реклама


**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 200руб/мес, Текстовая 100руб/мес.
Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 11

Тема: MxINI

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

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

    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
    Сообщений
    101
    Репутация:
    40 ±
    Перемещено!

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

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

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

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

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

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

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

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

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

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

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    3,931
    Репутация:
    1502 ±
    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) Тема оформлена странно. Особенно если на тёмном стиле смотреть...
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Адрес
    Аҧсуа бызшәа
    Сообщений
    2,282
    Репутация:
    417 ±
    Цитата Сообщение от 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
    Адрес
    Восточный Мордор
    Сообщений
    3,931
    Репутация:
    1502 ±
    Таки измените <= на "=="
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

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

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

 

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

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

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

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

Ваши права

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