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

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

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

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

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

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

- - - - - criminal russiacrmp урок dc_cmd zcmd sscanf extract

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 5

#1
offline   JoKeR2020

JoKeR2020
  • 496
    • Сообщений: 1 798
    • Регистрация: 26.11.14

Всем привет!

 

На днях я столкнулся с интересным способом работы с sscanf без вызова функции sscanf().

Наткнулся я на неё случайно когда листал другой форум.

Подробно о ней я узнал на

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

.

 

Для начала приведу простой пример команды на DC_CMD с использованием extract

 

Допустим у нас есть такая команда:

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

Как видно здесь я использую обычный sscanf.

А теперь другой формат данной команды через extract:

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

Как мы видим, перед нами появилась скорее вам не понятная конструкция.

Однако это действительно работает.

 

Синтаксис extract

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

<var1> - переменная которую нужно парсить.

Чтобы было наглядно:

Это та же первая переменная которую мы указываем в функции sscanf.

 

<vars> - это переменные в которые нужно записать значения.

 

<код если не соответствует> - это тот же return в обычной нам функции sscanf.

Здесь вы можете разместить любой код, который будет выполняться если значения в var1 не соответствуют заданным в vars.

 

Разделитель

Если вы хотите в парсинге использовать другой разделитель, а не пробел, то после var1 вы должны вставить вот это:

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

Разделитель это и есть то самое значение которое вы должны заменить на своё.

Пример:

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

Таким образом мы скажем sscanf'у что хотим использовать символ | как разделитель.

 

Как создавать переменные

Переменные в <vars> создаются через обычный new.

Но перед переменной должна присутствовать приставка (кроме целочисленных переменных, для них приставка не нужна).

Например создание трёх переменных (a, b, c):

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

Теперь разберём какие же типы переменных мы указали.

Переменная a - данную переменную sscanf будет использовать как целочисленное (пример: 5).

Переменная b - данная переменная имеет приставку string, что даёт ей тип строки, в квадратных скобках обязательно нужно указать размер строки, как и в обычном new (пример: Привет).

Переменная c - данная переменная имеет приставку Float, что даёт ей вещественный тип (пример: 0.5).

 

Типы переменных в extract

Некоторые типы переменных которые поддерживает extract:

  • без приставки - целочисленный тип (пример: 1)
  • приставка string - строковой тип (пример: Привет)
  • приставка Float - вещественный тип (пример: 1.60)
  • приставка player - аналог символу u (пример: Joker_Villen или его id: 1)
  • приставка hex - бинарное число (пример: 0xFF)

Это все типы которые мне удалось раздобыть в той теме на оф. форуме SAMP.

 

Создание дополнительных параметров

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

Объявлять данные переменные нужно как и обычные, но указывать значения прямо в new:

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

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

 

Я смог рассказать всё что понял со своим знанием английского из той темы и описал это здесь.


  • 10

#2
offline   Neat

Neat
  • 984
    • Сообщений: 2 392
    • Регистрация: 21.12.13

Спасибо, вычитал для себя полезную информацию.


  • 0

#3