Difference between revisions of "Ru:Format Class Functions (SourceMod Scripting)"
m (→Introduction) |
m (Исправил "обрежится" на "обрежется" в описании к расширенному формату "width") |
||
(9 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
=Введение= | =Введение= | ||
− | + | Формат классов функций, аргументов переменной - функции в [[SourceMod]] которые позволяют Вам форматировать строки. Простой пример этой <tt>Format()</tt> функции, выглядит следующим образом: | |
<pawn>decl String:buffer[512]; | <pawn>decl String:buffer[512]; | ||
− | Format(buffer, sizeof(buffer), " | + | Format(buffer, sizeof(buffer), "Ваше имя: %s", userName);</pawn> |
− | + | Если userName содержит "<tt>Frenzzy</tt>", содержимое <tt>buffer</tt> будет: "<tt>Ваше имя: Frenzzy</tt>". Прототип этих функций почти всегда содержит следующие параметры: | |
− | <pawn>const | + | <pawn>const char[] fmt, {Handle,float,_}:...</pawn> |
− | + | Например, обратите внимание на эти два выражения: | |
− | <pawn>native Format( | + | <pawn>native Format(char[] buffer, int maxlength, const char[] fmt, {Handle,float,_}:...); |
− | native PrintToClient(client, | + | native PrintToClient(int client, char[] fmt, {Handle,float,_}:...);</pawn> |
− | + | Таким образом, <tt>PrintToClient</tt> является формат-классовой функцией. Она может быть использована точно так же, как было показано ранее: | |
− | <pawn>PrintToClient(client, " | + | <pawn>PrintToClient(client, "Ваше имя: %s", userName);</pawn> |
− | = | + | =Спецификаторы Формата= |
− | + | Спецификаторы Формата имеют код, который позволяет указать, какие типы данных будут отображаться. Наиболее распространенными спецификаторами являются: | |
− | *''' | + | *'''Числовые''' |
− | **'''d''' | + | **'''d''' или '''i''': Целое число как десятичные |
− | **'''b''': | + | **'''b''': Бинарные символы в значении |
− | **'''f''': | + | **'''f''': Числа с плавающей точкой |
− | **'''x''' or '''X''': | + | **'''x''' or '''X''': Шестнадцатеричное представление бинарных значений (применение заглавных букв влияет на шестнадцатеричный регистр букв) |
− | *''' | + | *'''Символ(ы)''' |
− | **'''s''': | + | **'''s''': Строка |
− | **'''t''' | + | **'''t''' или '''T''': Переводы фраз (см. в [[Translations (SourceMod_Scripting)#Inline_Translations|Inline Translations]]) |
− | **'''c''': | + | **'''c''': Вывод одного символа (совместимо с UTF-8) |
− | *''' | + | *'''Специальные''' |
− | **'''L''': | + | **'''L''': Требуется индекс клиента; расширяется до 1<2><3><>, где 1 - имя игрока, 2 - userid игрока, и 3 - Steam ID игрока. Если клиент имеет индекс 0, строка будет: <tt><nowiki>Console<0><Console><Console></nowiki></tt> |
− | **'''N''': | + | **'''N''': Требуется индекс клиента; расширяется до строки, содержащей имя игрока. Если клиент имеет индекс 0, строка будет: <tt>Console</tt> |
− | = | + | =Использование= |
− | + | Спецификаторы формата обозначаются символом <tt>'%s'</tt>. Например, чтобы отобразилось число с плавающей точкой, десятичное число и строка, Вы можете использовать этот код: | |
− | <pawn> | + | <pawn>float fNum = 5.0; |
− | + | int iNum = 5; | |
− | + | char[] str = "5"; | |
− | PrintToClient(client, " | + | PrintToClient(client, "Десятичное число: %d Число с плавающей точкой: %f Строка: %s", iNum, fNum, str);</pawn> |
− | ''' | + | '''Примечание''': Использование неправильных типов данных спецификаторов может быть очень опасно. Всегда убедитесь, что выводится правильный тип. Например, указание строки и передача числа, может привести к падению сервера. |
− | = | + | =Расширенный формат= |
− | + | Спецификаторы формата имеют расширенный синтаксис для управления различными аспектами того, как будут выводиться данные. | |
− | <tt>%[flags][width][.precision]specifier</tt> | + | Полный синтаксис: <tt>%[flags][width][.precision]specifier</tt> |
− | + | Каждый раздел в квадратных скобках является дополнительным расширением. Описание поддерживаемых SourceMod расширений формата: | |
− | *'''%''': | + | *'''%''': Очевидно, что это требуется всегда. |
*'''flags''': | *'''flags''': | ||
− | **'''-''': | + | **'''-''': Выравнивание по левому краю (выравнивание по правому краю установлено по умолчанию) |
− | **'''0''': | + | **'''0''': Заполняет 0 вместо пробелов в случае необходимости (см. '''width''' ниже). |
− | *'''width''': | + | *'''width''': Минимальное количество символов, которые будут отображены. Если отображаемая величина будет короче, чем это число, результат будет заполнен пустым пространством. Значение так же не обрежется, даже если результат будет длиннее. |
− | *'''precision''': | + | *'''precision''': |
− | **'''For integers''': | + | **'''For integers''': определяет минимальное количество цифр для отображения (или заполняет пробелами/нулями, если она меньше минимальной). |
− | **'''For strings''': | + | **'''For strings''': определяет максимальное количество символов для отображения. |
− | **'''For floats''': | + | **'''For floats''': определяет количество цифр для отображения ''после запятой''. |
− | **'''For all other types''': | + | **'''For all other types''': нет эффекта. |
− | *'''specifier''': | + | *'''specifier''': символ указывающий тип данных (требуется всегда). |
− | + | Для получения более подробной информации см. [http://www.cplusplus.com/reference/clibrary/cstdio/printf.html printf] из C Standard Library, хотя не dсе режимы из C поддерживаются. | |
[[Category:Ru:SourceMod Scripting]] | [[Category:Ru:SourceMod Scripting]] |
Latest revision as of 12:55, 16 January 2019
Введение
Формат классов функций, аргументов переменной - функции в SourceMod которые позволяют Вам форматировать строки. Простой пример этой Format() функции, выглядит следующим образом:
decl String:buffer[512]; Format(buffer, sizeof(buffer), "Ваше имя: %s", userName);
Если userName содержит "Frenzzy", содержимое buffer будет: "Ваше имя: Frenzzy". Прототип этих функций почти всегда содержит следующие параметры:
const char[] fmt, {Handle,float,_}:...
Например, обратите внимание на эти два выражения:
native Format(char[] buffer, int maxlength, const char[] fmt, {Handle,float,_}:...); native PrintToClient(int client, char[] fmt, {Handle,float,_}:...);
Таким образом, PrintToClient является формат-классовой функцией. Она может быть использована точно так же, как было показано ранее:
PrintToClient(client, "Ваше имя: %s", userName);
Спецификаторы Формата
Спецификаторы Формата имеют код, который позволяет указать, какие типы данных будут отображаться. Наиболее распространенными спецификаторами являются:
- Числовые
- d или i: Целое число как десятичные
- b: Бинарные символы в значении
- f: Числа с плавающей точкой
- x or X: Шестнадцатеричное представление бинарных значений (применение заглавных букв влияет на шестнадцатеричный регистр букв)
- Символ(ы)
- s: Строка
- t или T: Переводы фраз (см. в Inline Translations)
- c: Вывод одного символа (совместимо с UTF-8)
- Специальные
- L: Требуется индекс клиента; расширяется до 1<2><3><>, где 1 - имя игрока, 2 - userid игрока, и 3 - Steam ID игрока. Если клиент имеет индекс 0, строка будет: Console<0><Console><Console>
- N: Требуется индекс клиента; расширяется до строки, содержащей имя игрока. Если клиент имеет индекс 0, строка будет: Console
Использование
Спецификаторы формата обозначаются символом '%s'. Например, чтобы отобразилось число с плавающей точкой, десятичное число и строка, Вы можете использовать этот код:
float fNum = 5.0; int iNum = 5; char[] str = "5"; PrintToClient(client, "Десятичное число: %d Число с плавающей точкой: %f Строка: %s", iNum, fNum, str);
Примечание: Использование неправильных типов данных спецификаторов может быть очень опасно. Всегда убедитесь, что выводится правильный тип. Например, указание строки и передача числа, может привести к падению сервера.
Расширенный формат
Спецификаторы формата имеют расширенный синтаксис для управления различными аспектами того, как будут выводиться данные. Полный синтаксис: %[flags][width][.precision]specifier
Каждый раздел в квадратных скобках является дополнительным расширением. Описание поддерживаемых SourceMod расширений формата:
- %: Очевидно, что это требуется всегда.
- flags:
- -: Выравнивание по левому краю (выравнивание по правому краю установлено по умолчанию)
- 0: Заполняет 0 вместо пробелов в случае необходимости (см. width ниже).
- width: Минимальное количество символов, которые будут отображены. Если отображаемая величина будет короче, чем это число, результат будет заполнен пустым пространством. Значение так же не обрежется, даже если результат будет длиннее.
- precision:
- For integers: определяет минимальное количество цифр для отображения (или заполняет пробелами/нулями, если она меньше минимальной).
- For strings: определяет максимальное количество символов для отображения.
- For floats: определяет количество цифр для отображения после запятой.
- For all other types: нет эффекта.
- specifier: символ указывающий тип данных (требуется всегда).
Для получения более подробной информации см. printf из C Standard Library, хотя не dсе режимы из C поддерживаются.