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

From AlliedModders Wiki
Jump to: navigation, search
m (Introduction)
m (Исправил "обрежится" на "обрежется" в описании к расширенному формату "width")
 
(9 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
=Введение=
 
=Введение=
Format-class functions are variable argument functions in [[SourceMod]] which allow you to format a string. A simple example of this is the <tt>Format()</tt> function, which looks like:
+
Формат классов функций, аргументов переменной - функции в [[SourceMod]] которые позволяют Вам форматировать строки. Простой пример этой <tt>Format()</tt> функции, выглядит следующим образом:
  
 
<pawn>decl String:buffer[512];
 
<pawn>decl String:buffer[512];
Format(buffer, sizeof(buffer), "Your name is: %s", userName);</pawn>
+
Format(buffer, sizeof(buffer), "Ваше имя: %s", userName);</pawn>
  
If userName contains "<tt>Mark</tt>," the contents of <tt>buffer</tt> will then be: "<tt>Your name is: Mark</tt>."  The prototype of these functions almost always contains the following parameters:
+
Если userName содержит "<tt>Frenzzy</tt>", содержимое <tt>buffer</tt> будет: "<tt>Ваше имя: Frenzzy</tt>". Прототип этих функций почти всегда содержит следующие параметры:
<pawn>const String:fmt[], {Handle,Float,_}:...</pawn>
+
<pawn>const char[] fmt, {Handle,float,_}:...</pawn>
  
For example, observe the following two natives:
+
Например, обратите внимание на эти два выражения:
<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>
  
Thus, <tt>PrintToClient</tt> is a format-class function. It can be used exactly as shown earlier:
+
Таким образом, <tt>PrintToClient</tt> является формат-классовой функцией. Она может быть использована точно так же, как было показано ранее:
<pawn>PrintToClient(client, "Your name is: %s", userName);</pawn>
+
<pawn>PrintToClient(client, "Ваше имя: %s", userName);</pawn>
  
=Format Specifiers=
+
=Спецификаторы Формата=
A format specifier is a code that allows you to specify what data-type to print. The most common specifiers are:
+
Спецификаторы Формата имеют код, который позволяет указать, какие типы данных будут отображаться. Наиболее распространенными спецификаторами являются:
*'''Numerical'''
+
*'''Числовые'''
**'''d''' or '''i''': Integer number as decimal
+
**'''d''' или '''i''': Целое число как десятичные
**'''b''': Binary digits in the value
+
**'''b''': Бинарные символы в значении
**'''f''': Floating-point number
+
**'''f''': Числа с плавающей точкой
**'''x''' or '''X''': Hexadecimal representation of the binary value (capitalization affects hex letter casing)
+
**'''x''' or '''X''': Шестнадцатеричное представление бинарных значений (применение заглавных букв влияет на шестнадцатеричный регистр букв)
*'''Character(s)'''
+
*'''Символ(ы)'''
**'''s''': String
+
**'''s''': Строка
**'''t''' or '''T''': Translates a phrase (explained in [[Translations (SourceMod_Scripting)#Inline_Translations|Inline Translations]])
+
**'''t''' или '''T''': Переводы фраз (см. в [[Translations (SourceMod_Scripting)#Inline_Translations|Inline Translations]])
**'''c''': Prints one character (UTF-8 compliant)
+
**'''c''': Вывод одного символа (совместимо с UTF-8)
*'''Special'''
+
*'''Специальные'''
**'''L''': Requires a client index; expands to 1<2><3><> where 1 is the player's name, 2 is the player's userid, and 3 is the player's Steam ID. If the client index is 0, the string will be: <tt><nowiki>Console<0><Console><Console></nowiki></tt>
+
**'''L''': Требуется индекс клиента; расширяется до 1<2><3><>, где 1 - имя игрока, 2 - userid игрока, и 3 - Steam ID игрока. Если клиент имеет индекс 0, строка будет: <tt><nowiki>Console<0><Console><Console></nowiki></tt>
**'''N''': Requires a client index; expands to a string containing the player's name. If the client index is 0, the string will be: <tt>Console</tt>
+
**'''N''': Требуется индекс клиента; расширяется до строки, содержащей имя игрока. Если клиент имеет индекс 0, строка будет: <tt>Console</tt>
  
=Usage=
+
=Использование=
Format specifiers are denoted with a <tt>'%s'</tt> symbol. For example, to print a float, a number, and a string, you might use this code:
+
Спецификаторы формата обозначаются символом <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, "Number: %d Float: %f String: %s", iNum, fNum, str);</pawn>
+
PrintToClient(client, "Десятичное число: %d Число с плавающей точкой: %f Строка: %s", iNum, fNum, str);</pawn>
  
'''Note''': Using the wrong data type with a specifier can be very dangerous. Always make sure you are printing as the right type. For example, specifying a string and passing a number can crash the server.
+
'''Примечание''': Использование неправильных типов данных спецификаторов может быть очень опасно. Всегда убедитесь, что выводится правильный тип. Например, указание строки и передача числа, может привести к падению сервера.
  
=Advanced Formatting=
+
=Расширенный формат=
Format specifiers have an extended syntax for controlling various aspects of how data is printed. The full syntax is:
+
Спецификаторы формата имеют расширенный синтаксис для управления различными аспектами того, как будут выводиться данные.
<tt>%[flags][width][.precision]specifier</tt>
+
Полный синтаксис: <tt>%[flags][width][.precision]specifier</tt>
  
Each bracketed section is an optional extension. Explanations of supported SourceMod format extensions:
+
Каждый раздел в квадратных скобках является дополнительным расширением. Описание поддерживаемых SourceMod расширений формата:
*'''%''': Obviously, this is always required.
+
*'''%''': Очевидно, что это требуется всегда.
 
*'''flags''':
 
*'''flags''':
**'''-''': Left-justify (right-justify is set by default)
+
**'''-''': Выравнивание по левому краю (выравнивание по правому краю установлено по умолчанию)
**'''0''': Pads with 0s instead of spaces when needed (see '''width''' below).
+
**'''0''': Заполняет 0 вместо пробелов в случае необходимости (см. '''width''' ниже).
*'''width''': Minimum number of characters to be printed. If the value to be printed is shorter than this number, the result is padded with blank spaces. The value is not truncated even if the result is larger.
+
*'''width''': Минимальное количество символов, которые будут отображены. Если отображаемая величина будет короче, чем это число, результат будет заполнен пустым пространством. Значение так же не обрежется, даже если результат будет длиннее.
*'''precision''':  
+
*'''precision''':
**'''For integers''': specifies the minimum number of digits to print (or pad with spaces/zeroes if below the minimum).
+
**'''For integers''': определяет минимальное количество цифр для отображения (или заполняет пробелами/нулями, если она меньше минимальной).
**'''For strings''': specifies the maximum number of characters to print.
+
**'''For strings''': определяет максимальное количество символов для отображения.
**'''For floats''': specifies the number of digits to be printed ''after the decimal point''.
+
**'''For floats''': определяет количество цифр для отображения ''после запятой''.
**'''For all other types''': no effect.
+
**'''For all other types''': нет эффекта.
*'''specifier''': character specifying the data type (always required).
+
*'''specifier''': символ указывающий тип данных (требуется всегда).
  
For more information, see [http://www.cplusplus.com/reference/clibrary/cstdio/printf.html printf] from the C Standard Library, although not all modes are supported from C.
+
Для получения более подробной информации см. [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 поддерживаются.