Difference between revisions of "Ru:Format Class Functions (SourceMod Scripting)"

From AlliedModders Wiki
Jump to: navigation, search
m (Расширенный формат)
Line 6: Line 6:
  
 
Если userName содержит "<tt>Frenzzy</tt>", содержимое <tt>buffer</tt> будет: "<tt>Ваше имя: Frenzzy</tt>". Прототип этих функций почти всегда содержит следующие параметры:
 
Если userName содержит "<tt>Frenzzy</tt>", содержимое <tt>buffer</tt> будет: "<tt>Ваше имя: Frenzzy</tt>". Прототип этих функций почти всегда содержит следующие параметры:
<pawn>const String:fmt[], {Handle,Float,_}:...</pawn>
+
<pawn>const char[] fmt, {Handle,float,_}:...</pawn>
  
 
Например, обратите внимание на эти два выражения:
 
Например, обратите внимание на эти два выражения:
<pawn>native Format(String:buffer[], maxlength, const String:fmt[], {Handle,Float,_}:...);
+
<pawn>native Format(char[] buffer, int maxlength, const char[] fmt, {Handle,float,_}:...);
native PrintToClient(client, String:fmt[], {Handle,Float,_}:...);</pawn>
+
native PrintToClient(int client, char[] fmt, {Handle,float,_}:...);</pawn>
  
 
Таким образом, <tt>PrintToClient</tt> является формат-классовой функцией. Она может быть использована точно так же, как было показано ранее:
 
Таким образом, <tt>PrintToClient</tt> является формат-классовой функцией. Она может быть использована точно так же, как было показано ранее:
Line 32: Line 32:
 
=Испрльзование=
 
=Испрльзование=
 
Спецификаторы формата обозначаются символом <tt>'%s'</tt>. Например, чтобы отобразилось число с плавающей точкой, десятичное число и строка, Вы можете использовать этот код:
 
Спецификаторы формата обозначаются символом <tt>'%s'</tt>. Например, чтобы отобразилось число с плавающей точкой, десятичное число и строка, Вы можете использовать этот код:
<pawn>new Float:fNum = 5.0;
+
<pawn>float fNum = 5.0;
new iNum = 5
+
int iNum = 5
new String:str[] = "5"
+
char[] str = "5"
  
 
PrintToClient(client, "Десятичное число: %d Число с плавающей точкой: %f Строка: %s", iNum, fNum, str);</pawn>
 
PrintToClient(client, "Десятичное число: %d Число с плавающей точкой: %f Строка: %s", iNum, fNum, str);</pawn>
Line 49: Line 49:
 
**'''-''': Выравнивание по левому краю (выравнивание по правому краю установлено по умолчанию)
 
**'''-''': Выравнивание по левому краю (выравнивание по правому краю установлено по умолчанию)
 
**'''0''': Заполняет 0 вместо пробелов в случае необходимости (см. '''width''' ниже).
 
**'''0''': Заполняет 0 вместо пробелов в случае необходимости (см. '''width''' ниже).
*'''width''': Минимальное количество символов, которые будут отображены. Если отображаемая величина будет короче, чем это число, результат будет заполнен пустым пространством. Значение так же не обрежится, даже если результат будет длинее.
+
*'''width''': Минимальное количество символов, которые будут отображены. Если отображаемая величина будет короче, чем это число, результат будет заполнен пустым пространством. Значение так же не обрежится, даже если результат будет длиннее.
 
*'''precision''':
 
*'''precision''':
 
**'''For integers''': определяет минимальное количество цифр для отображения (или заполняет пробелами/нулями, если она меньше минимальной).
 
**'''For integers''': определяет минимальное количество цифр для отображения (или заполняет пробелами/нулями, если она меньше минимальной).
Line 57: Line 57:
 
*'''specifier''': символ указывающий тип данных (требуется всегда).
 
*'''specifier''': символ указывающий тип данных (требуется всегда).
  
Для получения более подробной информации см. [http://www.cplusplus.com/reference/clibrary/cstdio/printf.html printf] из C Standard Library, хотя не Все режимы из C поддерживаются.
+
Для получения более подробной информации см. [http://www.cplusplus.com/reference/clibrary/cstdio/printf.html printf] из C Standard Library, хотя не dсе режимы из C поддерживаются.
  
 
[[Category:Ru:SourceMod Scripting]]
 
[[Category:Ru:SourceMod Scripting]]

Revision as of 19:08, 10 January 2017

Введение

Формат классов функций, аргументов переменной - функции в 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 поддерживаются.