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

Тема: sscanf

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

    Статус
    Оффлайн
    Регистрация
    03.05.2013
    Сообщений
    258
    Репутация:
    6 ±

    sscanf

    Всем привет, у меня появилось затруднение. Как использовать sscanf в MySQL а именно в одно поле записать несколько значений и их же потом использовать.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    sscanf - обычная функция-разделитель, а-ля split. Просто более функциональная и удобная. Нужно лишь разок прочитать описание на странице sa-mp.com с плагином. Не понимаю откуда у вас столько проблем с этой самой обычной функцией...

    Ну как? Сначала формируем строку из данных и разделяем эти данные каким-то особенным символом, которого нет в тех данных, что вы разделяете.
    Например:

    PHP код:
    new number_1 10;
    new 
    number_2 6;
    new 
    number_3 142;
    new 
    number_4 13;
    new 
    string[12] = "Я - Легенда"
    Смотрим на наши данные и понимаем, что в качестве разделителя не получится использовать числа "0, 1, 2, 3, 4, 6", буквы "я, л, е, г, н, д, а", черту (дефис/тире) и пробел. Значит пред нами открываются все остальные символы, которые мы могли бы использовать в качестве разделителя финальной строки.
    Использовать буквы или цифры не совсем целесообразно, ибо тогда данные будут сливаться и чтение/редактирование запакованной строки вручную окажется не самым удобным и приятным занятием. Поэтому от них мы откажемся. Значит стоит обратить свой взор на другие спец символы, которые бы не сливались с нашими данными. Допустим, мы взяли знак "точка с запятой (;)". Тогда наша финальная, запакованная строка будет выглядеть следующим образом: "10;6;142;13;Я - Легенда". Для хранения этой строки нам понадобится ещё один массив, который мы и создадим. Далее сформируем нашу строку с помощью функции format и запишем её в массив:

    PHP код:
    new buffer[24];
    new 
    number_1 10;
    new 
    number_2 6;
    new 
    number_3 142;
    new 
    number_4 13;
    new 
    string[12] = "Я - Легенда";
    format(buffersizeof(buffer), "%d;%d;%d;%d;%s"number_1number_2number_3number_4string); 
    Всё. Теперь у нас есть запакованная строка с разными данными. Её уже и записываем куда нам надо.

    Распаковать строку можно с помощью любой функции-разделителя. Ну раз вопрос идёт именно о sscanf, то покажу именно на примере sscanf. Работать будем с получившейся выше строкой.
    PHP код:
    new number_1;
    new 
    number_2;
    new 
    number_3;
    new 
    number_4;
    new 
    string[12];
    sscanf(buffer"p<;>iiiis[12]"number_1number_2number_3number_4string); 
    1. В массиве buffer хранится наша запакованная строка. Первым параметром функции sscanf указывается строка, с которой мы будем работать.

    2. Далее в скобках мы указали то, какой разделитель должна искать наша функция sscanf в данной ей строке. Указали мы его в этом участке:
      sscanf(buffer, "p<;>iiiis[12]", number_1, number_2, number_3, number_4, string);
      Разделителем может быть любой символ/набор символов. Если же разделитель не указать, sscanf будет использовать в качестве разделителя пробел.

    3. Далее указываем тип данных, который мы ожидаем получить из нашей строки, хранящейся в массиве "buffer". Сейчас мы указали 4 числа и строку.

    4. Ну и потом идут переменные, в которые будут записаны наши распакованные данные.

    Как-то так. Это самый примитивный способ :)
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    03.05.2013
    Сообщений
    258
    Репутация:
    6 ±
    Спасибо, тему можно закрывать думаю.

  5. #4
    Аватар для Osetin
    •Администратор•

    Статус
    Оффлайн
    Регистрация
    26.03.2013
    Адрес
    ♔Osetia, Vladikavkaz♔
    Сообщений
    3,432
    Репутация:
    1093 ±
    Закрыто.

 

 

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

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

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

Ваши права

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