Русское сообщество по скриптингу

Парсинг INI  [Решено]

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Парсинг INI

Сообщение deadkid56 » 09 ноя 2019, 00:45

Доброго времени суток.
Интересует реализация парсинга .ini формата:
Код: Выделить всё
[PLAYER_SETTING]

PLAYER_HP 100
PLAYER_ARMOR 
100
PLAYER_SPEED 
240



Тоесть мне нужно из блока PLAYER_SETTING достать значения PLAYER_HP,PLAYER_ARMOR и PLAYER_SPEED.
Смотрел плагины,где так скажем, "поблочный" парсинг. Но в них черт ногу сломит.

Кого не затруднит, приведете простой пример. Буду признателен!
Аватара пользователя
deadkid56
 
Сообщения: 42
Зарегистрирован: 09 авг 2018, 10:41
Благодарил (а): 8 раз.
Поблагодарили: 4 раз.
Языки программирования: Я ничего не знаю

Re: Парсинг INI  [Решено]

Сообщение hren_morjovui » 09 ноя 2019, 08:11

Что-то типа того
Код: Выделить всё

    
// ID секций в INI файле
    enum
    
{
        SECTION_NONE = 0,
        SECTION_PLAYER_SETTING
    
}
    
    
// Для `хранения` настроек
    new player_settings[3];
    
    
// Путь директории configs
    new cfgdir[64];
    
    get_configsdir
(cfgdir, charsmax(cfgdir));
    
    
// Путь к файлу настроек
    format(cfgdir, charsmax(cfgdir), "%s/%s", cfgdir, "plclasses.ini");
    
    
// Если файл ненайден
    if (!file_exists(cfgdir))
    {
        new error[100];
        formatex(error, charsmax(error), "Cannot load customization file %s!", cfgdir);
        set_fail_state(error);
        return;
    }
    
    new linedata
[1024], key[64], value[64], section;
    
    
// Открываем файл для чтения
    new file = fopen(cfgdir, "rt")
    
    while 
(file && !feof(file))
    {
        // Читаем одну строку
        fgets(file, linedata, charsmax(linedata));
        
        
// Удаляем символы переноса строки
        replace(linedata, charsmax(linedata), "^n", "");
        
        
// Пустая или закомментированая строка
        if (!linedata[0] || linedata[0] == ';') continue;
        
        
// Следующая секция
        if (linedata[0] == '[')
        {
            section++;
            continue;
        }
        
        
// Получаем (ключ = значение) с файла
        strtok(linedata, key, charsmax(key), value, charsmax(value), '=');
        
        
// Удаляем пробелы в начале и в конце строки
        trim(key);
        trim(value);
        
        
// Пропускаем пустые строки
        if(!value[0] || !key[0])
            continue;

        // Сохраняем настройки в массив
        switch(section)
        {
            case SECTION_PLAYER_SETTING:
            {
                if (equal(key, "PLAYER_HP"))
                    player_settings[0] = str_to_num(value);
                else if (equal(key, "PLAYER_ARMOR"))
                    player_settings[1] = str_to_num(value);
                else if (equal(key, "PLAYER_SPEED"))
                    player_settings[2] = str_to_num(value);
            }
        }
    }
    if(file) fclose(file);
 
"В этом мире неизбежны три вещи: смерть, налоги и гравитация."
Аватара пользователя
hren_morjovui
 
Сообщения: 258
Зарегистрирован: 29 май 2018, 09:15
Благодарил (а): 88 раз.
Поблагодарили: 22 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn
PHP
jQuery


Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10