Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 3 из 3
  1. #1
    Аватар для StevenH
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    516
    Репутация:
    21 ±

    Найти и извлечь..

    Есть следующий текст в диалоге (приходит с HTTP после регистрации аккаунта на форуме).


    Нужно как то вытянуть от сюда поле где написано: Номер аккаунта: 18 (вытянуть нужно только само число и представить его в виде целочисленного числа, чтобы сохранить в обычную int переменную).

    Мне это нужно, чтобы id аккаунта сохранить в аккаунт игрока, а при необходимости по номеру аккаунта с форуму, обращаться к API, например получать статистику с форумного аккаунта и прочее.

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

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    516
    Репутация:
    21 ±
    Подниму пожалуй спустя 16 часов

    Up..

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Эхх, велосипеды... Обожаю.


    Как я уже писал в соседней теме, можно при помощи strfind. Вот готовая схема
    PHP код:
    new string[] = "Регистрация форумного аккаунта завершена!\n\nНомер аккаунта:\t\t18\nИмя аккаунта:\t\tDeimoS",// Массив с текстом диалога
        
    pos1,
        
    pos2,
        
    buff[11];

    static const 
    find_string[] = "Номер аккаунта:\t\t";// А тут тот участок текста, который стоит перед ID аккаунта
    pos1 strfind(stringfind_stringfalse0) + (sizeof(find_string)-1);// Собственно, сам поиск. 
    pos2 strfind(string"\n"falsepos1);
    strmid(buffstringpos1pos211);
    printf("|%s| %d"buffstrval(buff));// Результат в массиве buff, который можно как строкой отобразить, так и числом при помощи strval 
    Принцип тут такой:
    PHP код:
    pos1 strfind(stringfind_stringfalse0) + (sizeof(find_string)-1); 
    В этой строке strfind находит начало фразы "Номер аккаунта:\t\t" (то бишь, расположение первой буквы в массиве string). Далее мы прибавляем к полученной координате размер самой строки "Номер аккаунта:\t\t", дабы добраться до начала нашего ID (так как работаем с sizeof, которая возвращает не максимальный порядковый номер массива (от 0 до ...), а именно количество ячеек (0+1+2+3+4 = 5 ячеек), то для того, чтоб вернуть именно размер строки, отнимаем единицу). Собственно, в pos1 у нас есть координата начала ID.
    Сама строка для поиска определяется легко: берём всё то, что нам известно о тексте до искомого нами участка (точнее, то, что позволит нам сделать искомый текст максимально уникальным (именно поэтому там не просто взяло слово "аккаунта" или символ "\t") и уже по нему ищем). Если такого текста нет (так, на будущее), проявляем смекалку и при форматировании этот текст добавляем (например, можно было выделить ID аккаунта вот такими скобками: «» - которые нужно исключить из остального текста (дабы они были уникальны) и уже по ним найти начало и конец).

    А уже вот тут:
    PHP код:
    pos2 strfind(string"\n"falsepos1); 
    мы ищем конец нашего ID, который записан в виде текста. В данном случае сразу после ID идёт символ переноса строки, который мы и ищем. Если был бы другой какой-то текст, известный нам заранее - искали бы его.

    Ну и тут уже вычленяем наш ID в отдельный массив, опираясь на полученные координаты:
    PHP код:
    strmid(buffstringpos1pos211); 
    Всё
    Последний раз редактировалось DeimoS; 22.07.2017 в 14:22.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  4. Пользователь сказал cпасибо:
    StevenH (22.07.2017)
 

 

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

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

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

Ваши права

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