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

Реклама


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

Тема: sscanf

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

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

    sscanf

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

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

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

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

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

    Steve Pavlina

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

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

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

    Статус
    Оффлайн
    Регистрация
    26.03.2013
    Адрес
    Pro-Pawn.Ru
    Сообщений
    3,428
    Репутация:
    1079 ±
    Закрыто.

 

 

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

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

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

Ваши права

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