Сайт восстановлен из веб архива. Сейчас он доступен только для чтения, скачивание материалов также недоступно. Если у вас до сих пор есть какие-то вопросы по разработке серверов CRMP, вы можете перейти на актуальный портал: https://pawno-rus.com

Перейти к содержимому

Уважаемый гость, если у Вас возникли проблемы с регистрацией, просьба обратиться в тех.поддержку или на почту admin@pawno-crmp.ru

Для полного доступа ко всем функциям форума, Вам необходимо зарегистрироваться и авторизоваться.

Фотография
Урок

Используем функцию sscanf

- - - - - criminal russia crmp pawno уроки crmp крмп

  • Авторизуйтесь для ответа в теме
В этой теме нет ответов

#1
online   Elrmrnt-Kritik

Elrmrnt-Kritik
  • 810
    • Сообщений: 3 284
    • Регистрация: 19.07.15

Введение. Основная информация.

Доброе время суток, участники форума. Достаточно часто пользуюсь функцией sscanf. Почему? Она удобна и практична. Причем использовать ее можно не только в командах, но и, например, при загрузке чего-либо из базы данных, как это делаю я. Допустим, есть система автомобилей. Дабы не создавать два столбца для каждого из двух возможных цветов транспортного средства, можно создать один, в который записывать значение вида "цвет_1, цвет_2". Записать-то запишем, через format:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Но вот получить из этой строки два значения уже будет проблематично. Приходит нам на помощь sscanf2.

Скачать sscanf2. Все инструкции по подключению изложены в той же теме.

 

Итак, функция имеет следующие аргументы:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

По поводу разделителей. Собственно, это тот символ, которым Вы разделяете введенные данные. Например, если аргументы записаны через запятую, тогда разделитель будет таким: <,>, если вертикальная палочка, <|>, если тире, <->, если пробел, < >. Если у Вас разделителем выступает пробел, тогда < > можно и вовсе не писать.

Что касается типов извлекаемых данных... Есть всего 4 типа: 

  • i, d - целые числа (например, "1", "-10", "120");
  • s[размер] - строка (например, "Форум", "Да", "PW");
  • f - дробные числа (например, "17.575", "-47.8", "100.99");
  • u - ID игрока или часть имени (например, "0", "1", "Vasya_Pet", "Vasya_Petrov");

Пример 1.

Вернемся к начальному примеру использования sscanf. В переменную string записаны два цвета: color1 и color2 через запятую. Нам нужно каждый из них увеличить на единицу (инкрементировать). Для этого сначала нужно получить каждый цвет из строки, а затем увеличивать их на единицу. Поскольку цвета имеют целочисленный тип данных, создаем две переменные типа integer:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Извлекаем оба цвета, записанных через запятую, из переменной string:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Опять же, так как цвета имеют целочисленный тип, то используем d в обеих случаях. Далее все просто, записываем обратно в строку string при помощи format две увеличенные на единицу переменные:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Но лучше сделать так, если хотите создать меньшую нагрузку на систему:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Пример 2.

Извлечем из переменной string три аргумента: UNIX время выдачи бана часа, UNIX время истечения бана чата и причину выдачи. Они записаны через пробел. UNIX время в обеих случаях приобретает целочисленный тип данных, а вот причина - строковый.  Следовательно, выглядеть будет так: dds[100]. 100 я указал для примера. Допустим, максимальная длина причины не должна превышать 100 символов. В целом это будет выглядеть так:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Пример 3.

Создаем команду телепортации по указанным координатам. Допустим, координаты записаны через запятую в переменной string. В этом случае наш sscanf примет следующий вид:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Пример 4.

Ситуация посложнее. В переменную записаны дата и время какого-либо события: "2017-05-25 22:00". Сначала нужно извлечь три аргумента целочисленного типа, записанных через тире, а затем два аргумента целочисленных типов, записанных через двоеточие:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Ну и тогда в argument1 попадет 2017, в argument 2 - 05, в argument3 - 25, в argument 4 - 22, в аргумент 5 - 00.

 

Будет полезно при использовании данной функции в командах:

sscanf возвращает значение 0. Это значит, что для проверки, удалось ли найти все указанные аргументы нужно писать:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

и, соответственно,

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Пример команды /goto. Можно вводить координаты, можно вводить ID игрока, а можно просто ничего не вводить и телепортироваться на заданные кодом координаты:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Собственно это все. Автор: я, Elrmrnt-Kritik.


Сообщение отредактировал Elrmrnt-Kritik: 25 Май 2017 - 22:49

  • 4



Темы с аналогичным тегами Урок, criminal russia, crmp, pawno, уроки crmp, крмп

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных


Данную тему посетили 30 пользователей