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

функция поиска значений в файле ...  [Решено]

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

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

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

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

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

функция поиска значений в файле ...

Сообщение PbIC9TuHa » 18 май 2018, 08:43

стоит задача находить в определенном файле, СТИМ игрока (или его NickName) и возвращать true
формат файла прост, но в нем куча записей:

"STEAM1" "MODEL" "DATA" "и др и тд"
STEAM2" "MODEL" "DATA" "и др"
"STEAM3" "MODEL" "DATA" "и др"

не подскажите как осуществить поиск ?
вообще не нашел описание поиска в мануалах по работе с файлами .
есть варианты попроще нежели считывать построчно/поблочно и выверять совпадения ?
Аватара пользователя
PbIC9TuHa
 
Сообщения: 37
Зарегистрирован: 12 дек 2016, 09:49
Благодарил (а): 10 раз.
Поблагодарили: 2 раз.
Опыт программирования: Меньше недели
Языки программирования: php

Re: функция поиска значений в файле ...

Сообщение Subb98 » 18 май 2018, 08:53

Раньше было возможно только парсить файл построчно. Сейчас в AMXX добавили новые нативы для работы с файлами, возможно, есть функция, которая за один раз считывает весь файл в ассоциативный массив, например. Можно попробовать поискать подобную функцию в инклудах / в api: Вы должны зарегистрироваться, чтобы видеть ссылки.

Добавлено спустя 1 минуту 48 секунд:
Например, появились функции для работы Вы должны зарегистрироваться, чтобы видеть ссылки.. Можно воспользоваться ими, как вариант.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5454
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1319 раз.
Поблагодарили: 2324 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP, Ruby

Re: функция поиска значений в файле ...

Сообщение PbIC9TuHa » 18 май 2018, 09:03

Json -это хорошо , но у меня обычный INI файл .

еще раз повторю задачку :
- подключился игрок
- проверили наличие его стима в определенном файле
- если нет - false
- если есть - true

в файле может быть 20 - 50 строк
в строке несколько блоков
1 блок строки и есть СТИМ игрока .
может циклом пробежаться ? и не заморачиваться особо ?
и как это отразится на нагрузке сервера ?
Аватара пользователя
PbIC9TuHa
 
Сообщения: 37
Зарегистрирован: 12 дек 2016, 09:49
Благодарил (а): 10 раз.
Поблагодарили: 2 раз.
Опыт программирования: Меньше недели
Языки программирования: php

Re: функция поиска значений в файле ...

Сообщение Vaqtincha » 18 май 2018, 09:07

PbIC9TuHa, юзай трие массив.
Аватара пользователя
Vaqtincha
 
Сообщения: 67
Зарегистрирован: 28 мар 2018, 15:05
Предупреждения: 1
Благодарил (а): 0 раз.
Поблагодарили: 23 раз.

Re: функция поиска значений в файле ...

Сообщение Subb98 » 18 май 2018, 09:11

PbIC9TuHa, для чего повторять задачу? От того, что вы 1000 раз повторите слово "халва", слаще в горле не станет. Я вам предложил варианты, дальше вы уже можете выбрать оптимальный для вас.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5454
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1319 раз.
Поблагодарили: 2324 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP, Ruby

Re: функция поиска значений в файле ...  [Решено]

Сообщение PbIC9TuHa » 18 май 2018, 15:25

Vaqtincha писал(а):PbIC9TuHa, юзай трие массив.


сенькю - так и сделал
как обычно все оказалось до безобразия просто :)

за основу взял пример ранее описанный тут же на форуме :
Код: Выделить всё
#include <amxmodx>

static Trie:g_t_messages

public plugin_init
()
{
    register_clcmd("say","say_hook")
    
    
// Считываем информацию из файла:
    
    new i_file
=fopen("addons/amxmodx/configs/test.ini","rt")
    
    if
(!i_file)
        return PLUGIN_CONTINUE
    
    g_t_messages
=TrieCreate()
    
    new s_buffer
[256],s_message[128],s_reason[128]
    
    while
(!feof(i_file))
    {
        fgets(i_file,s_buffer,255)
        
        trim
(s_buffer)
        
        if
(!s_buffer[0]||s_buffer[0]==';'||(s_buffer[0]=='/'&&s_buffer[1]=='/'))
            continue
        
        
// Парсим на сообщение и причину блокировки:
        
        parse
(s_buffer,s_message,127,s_reason,127)
        
        
// Добавляем ключ - сообщение, строку - причину блокировки:
        
        TrieSetString
(g_t_messages,s_message,s_reason)
    }
    
    fclose
(i_file)
    
    return PLUGIN_CONTINUE

}

public say_hook(i_player)
{
    // Получаем сообщение пользователя:
    
    new i_argc
=read_argc()
    new s_buffer[128],s_message[128]
    
    for
(new a=1;a<i_argc;a++)
    {
        read_argv(a,s_buffer,127)
        
        format
(s_message,127,"%s %s",s_message,s_buffer)
    }
    
    format
(s_message,127,s_message[1])
    
    
// Если такой ключ есть
    
    if
(TrieKeyExists(g_t_messages,s_message))
    {
        new s_banreason[128]
        
        
// Получаем значение - причину блокировки:
        
        TrieGetString
(g_t_messages,s_message,s_banreason,127)
        
        
// Блокируешь пользователя, что угодно, к примеру кик:
        
        server_cmd
("kick #%d Using %s!",s_banreason)
    }
}
 


Только в моем случае я не читаю ЧАт - а просто подсовываю STEAM
Аватара пользователя
PbIC9TuHa
 
Сообщения: 37
Зарегистрирован: 12 дек 2016, 09:49
Благодарил (а): 10 раз.
Поблагодарили: 2 раз.
Опыт программирования: Меньше недели
Языки программирования: php


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

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

Сейчас этот форум просматривают: applience12, Bing [Bot], Google [Bot] и гости: 28