Гость stibs

Использование sscanf

В теме 2 сообщения

ПАРУ СЛОВ О SSCANF...

sscanf - разделитель данных с параметром. 

Например, у нас есть данные вида: 2|3|4. Как вы заметили, разделителем между цифрами (2, 3, 4) является знак '|'. Допустим, эти данные хранятся у нас в базе данных. Как же их правильно и не сложно извлечь? Вот эту задачу и решает sscanf. 

ИСПОЛЬЗОВАНИЕ, ПАРАМЕТРЫ. 

Как уже выше было сказано, sscanf можно использовать для сохранения в бд. Можно использовать также в качестве разделителя в командах. С теорией в этой теме покончено, теперь перейдем к практике. 

 


Общий вид функции: 

sscanf(где_разделяем, "p<разделитель>идентификатор_параметра(-ов)", исходные_аргументы); 

Ну, а теперь подробней: 

  • Где разделяем: строка, из которой извлекаем данные, которые были сохранены в нее с использованием какого-нибудь разделителя. 
  • Разделитель: собственно, сам знак, который разделяет символы между собой (подробнее в начале темы). 
  • Идентификатор параметра(-ов): тип данных, который использован в строке: 
    s - string - строчный тип (буквы и т.д.); 
    i - integer - целочисленный тип (только цифры); 
    f - float - число с плавающей точкой (пример: 1,10). 
  • Исходные аргументы: аргументы (переменные), в которые будут записаны уже разделенные и структурированные данные. 

ИНФОРМАЦИЯ: 
При использования идентификатора параметра s (строчный тип) обязательно к указанию размер строки, который будет извлекаться. 
Например: 
sscanf(string, "s[20]ii", string2, number1, number2);

Теперь можно разобрать пару примерчиков для более глубокого осознания. 

Задача: У нас есть переменная, скажем, numbers. Данная переменная содержит в себе два числа, которые нам нужно выделить из нее. В качестве разделителя будет использована запятая. 

Решение: 

new number[2]; // создадим массивную переменную под два числа. 
new numbers[4] = "1,2"; // запишем в строку numbers два числа: 1 и 2 через запятую
sscanf(numbers, "p<,>dd", number[0], number[1]); // с помощью sscanf разделим каждое число в отдельную перменную
printf("%d + %d = %d", number[0]/*записываем первое число*/, number[1]/*записываем второе число*/, number[0]+number[1]/*записываем их сумму*/); // выведем их в консоль в качестве сложения

Теперь давайте возьмем что-нибудь посложнее. 

Задача: У нас есть переменная carnumbers. Она хранит в себе значение номера и региона, разделенного знаком "|". Причем, цифры в номере разделены пробелом. 

Решение: 

new carnumbers[17] = "A 1 2 3 A A | 52";
new letter[3]; // создаем массив для трех букв
new numbers[5]; // создаем массив для 5 цифр (из исходного номера - первая строка). 
sscanf(carnumbers, "p< >sdddss<|>dd", letter[0], number[0], number[1], number[2], letter[1], letter[2], number[3], number[4]); 

Из решения видно, что буква A попадет в переменную letter[0], цифра 1 в переменную number[0] ну и так далее по аналогии. 


Рад, что, возможно, хоть немного что-то прояснил в вашей голове. 

На этом урок окончен, всем спасибо. 

Автор: @stibs

При копировании на другие источники авторство к указанию обязательно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

АВТОМАТИЧЕСКИ СФОРМИРОВАННОЕ СООБЩЕНИЕ:

Данная тема была перемещена модерацией или администрацией портала PAWNO-RUS.RU! 

Перемещена из: "Скриптинг PAWN > Готовые решения"

Перемещена в: "Скриптинг PAWN > Уроки"

 

С уважением, ваш Бот! 

Если вы НЕ согласны с переносом данной темы в раздел "Скриптинг PAWN > Уроки", пожалуйтесь на это сообщение в жалобе указав причины вашего недовольства. Спасибо. 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!


Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.


Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • Доналдо Фарекелка
      От Доналдо Фарекелка


      Скачать файл Arizona RolePlay || Ser
      Приветствую, этот мод я нашёл на просторах интернета. 
      Скачал мод у автора:  Developer Stravinskiy
      Доработал мод: Donaldo_Farekelka
       
      Предупреждаю! Мод сырой, багов стало меньше, но они есть.
      Мод: Баня, Подвал, В некоторых местах маппинг, система коронавируса, 8 лвл админок
       
      Информация:
      1) Dc_Cmd
      2) Mysql, mode, language - Всё настраивается теперь в pawno ( UPDATE: 1.1.0 )
      3) Административные права в данный момент можно выдать только через MYSQL ( BD ).
       
      То что я сделал ( Всё что я делаю сейчас, смотрите в изменениях ):
       
      Добавил Доналдо Фарекелка Добавлено 13.04.2023 Категория Моды Автор shenol (vk.com/donaldo_farekelka)  
    • KAIF
      От KAIF


      Скачать файл GTA RolePlay-МОД,СБОРКА
      !!!!!ВСЕГО ОДНА КОПИЯ!!!! 
      Единственный мод GTA RP.
       
      Фракции:
      Правительство
      ГИБДД
      Полиция Южного
      ФСБ
      ЦГБ-А
      Автошкола
      Китайская мафия
      Русская Мафия
      Итальянская Мафия
      Американская Мафия
      Чеченская Мафия
      ВВС
      МЧС
      ОПГ Тяп-Ляп
      ОПГ Хади-Такташ
      СМИ Южного
      ФСИН
      В комплекте идёт СБОРКА И МОД.
      Единственный мод GTA RP.
      Добавил KAIF Добавлено 01.01.2024 Категория Моды Автор Aleksandr  
    • gooding
      От gooding
      Доброго времени суток! Я выложил на продажу игровой мод RedRow RolePlay!
       
      17 ТИТУЛОВ, 14 КОСТЮМОВ (КАМЕРМЭН, ФЕЯ, СИ-ДЖЕЙ, ДЭДПУЛ, СПАНЧ БОБ, НИНДЗЯ, ДЕД МОРОЗ и другие!),
      BMW I8, BMW M5, BMW Vision M NEXT, Mercedes-Benz G-CLASS, Rolls-Royce Phantom! Система рулетки  (Исправлена, теперь не выпадает одно и то же),
      Автопарки Фракций (FBI и банд), МОД ОПТИМИЗИРОВАЛИ под ИГРУ, ДОБАВИЛИ НОВЫЙ АНТИЧИТ (Latest Nex-AC) и АНТИЧИТ настроен. Проделано много работы (Над модом работали полгода) и исправили множество багов.
       
      Что было добавлено?
      1. 17 титулов,
      2. 14 костюмов,
      3. Эксклюзивный транспорт (SandKing, Rolls-Royce Phantom, BMW I8, BMW M5, BMW Vision M NEXT, Mercedes-Benz G-CLASS).
      4. Автопарк ФБР и всех банд.
      5. Новый анти-чит.
      6. Оптимизация игрового мода.
      7. Премиум и уникальные возможности для владельцев Премиума.
      8. Команда /bonus, где можно получить бесплатно Red Coins.
      9. За АКТИВ даются Red Coins!
      10. Рестарт сервера в 5:00 по МСК.
      11. Радужный клист.
      12. Уникальный тюнинг для эксклюзивных машин и ускорение.
      13. Новая система банка.
      14. Исправлено множество багов.
      15. Новый маппинг.
    • Redmondd
      От Redmondd
      Хочу сделать команду /gpsoff, которая убирает метку