Войти
UDKСтатьи

Строки в сценариях UnrealScript

Автор:

Обзор
Операторы
Функции класса Object
Функции класса Actor
Особые замечания

Обзор

Классы Object и Actor включают в себя несколько операторов и функций для выполнения действий со строками в сценариях UnrealScript. В этом документе мы подробно рассмотрим эти операторы и функции.

Операторы

$ (значок "доллар")

string $ ( coerce string A, coerce string B )

Оператор $ принимает две строки, A и B, и объединяет их. Если A или B не являются строками, то будет осуществлена попытка преобразования их значений в строки.

Пример:

`log("Unreal"$"Script"); //prints "UnrealScript"

$=

string $= ( out string A, coerce string B )

Оператор $= принимает две строки, A и B, объединяет их и присваивает результат первой строке. Если B не является строкой, то будет осуществлена попытка преобразования ее значения в строку.

Пример:

MyString = "Unreal";
MyString $= "Script"; // MyString contains "UnrealScript"

@ (at)

string @ ( coerce string A, coerce string B )

Оператор @ принимает две строки, A и B, и объединяет их, помещая между ними пробел. Если A или B не являются строками, то будет осуществлена попытка преобразования их значений в строки.

Пример:

log("Unreal"@"Engine"); //prints "Unreal Engine"

@=

string @= ( out string A, coerce string B )

Оператор @= принимает две строки, A и B, объединяет их, помещая между ними пробел, и присваивает результат первой строке. Если B не является строкой, то будет осуществлена попытка преобразования ее значения в строку.

Пример:

MyString = "Unreal";
MyString @= "Engine"; // MyString contains "Unreal Engine"

< (меньше)

bool < ( string A, string B )

Оператор < принимает две строки, A и B, и возвращает true если первая строка по алфавиту выше второй строки.  Обратите внимание, что заглавные буквы всегда по алфавиту выше строчных букв. В случаях, когда необходимо сравнить строки без учета регистра, воспользуйтесь функцией Caps.

Пример:

("Monkey" < "Robot") //this is TRUE.

> (больше)

bool > ( string A, string B )

Оператор >  принимает две строки, A и B, и возвращает true если первая строка по алфавиту ниже второй строки.  Обратите внимание, что заглавные буквы всегда по алфавиту выше строчных букв. В случаях, когда необходимо сравнить строки без учета регистра, воспользуйтесь функцией Caps.

Пример:

("Batman" > "Aquaman") //this is TRUE.

<= (меньше или равно)

bool <= ( string A, string B )

Оператор <=  принимает две строки, A и B, и возвращает true если первая строка по алфавиту выше или соответствует второй строке.  Обратите внимание, что заглавные буквы всегда по алфавиту выше строчных букв. В случаях, когда необходимо сравнить строки без учета регистра, воспользуйтесь функцией Caps.

Пример:

("Monkey" <= "Robot")  //this is TRUE.
("Monkey" <= "Monkey") //this is TRUE.

>= (больше или равно)

bool >= ( string A, string B )

Оператор >=  принимает две строки, A и B, и возвращает true если первая строка по алфавиту ниже или соответствует второй строке.  Обратите внимание, что заглавные буквы всегда по алфавиту выше строчных букв. В случаях, когда необходимо сравнить строки без учета регистра, воспользуйтесь функцией Caps.

Пример:

("Monkey" >= "Robot")  //this is FALSE.
("Monkey" >= "Monkey") //this is TRUE.

== (равно)

bool == ( string A, string B )

Оператор ==  принимает две строки, A и B, и возвращает true если строки совпадают. Учтите, что сравнение осуществляется с учетом регистра.

Пример:

("Monkey" == "Robot")  //this is FALSE.
("Monkey" == "Monkey") //this is TRUE.
("Monkey" == "monkey") //this is FALSE.

!= (не равно)

bool != ( string A, string B )

Оператор !=  принимает две строки, A и B, и возвращает true если строки НЕ совпадают. Учтите, что сравнение осуществляется с учетом регистра.

Пример:

("Monkey" != "Robot")  //this is TRUE.
("Monkey" != "Monkey") //this is FALSE.
("Monkey" != "monkey") //this is TRUE.

~= (приближенно равно)

bool ~= ( string A, string B )

Оператор ~=  принимает две строки, A и B, и возвращает истину, если строки совпадают независимо от регистра.

Пример:

("Monkey" ~= "Robot")  //this is FALSE.
("Monkey" ~= "Monkey") //this is TRUE.
("Monkey" ~= "monkey") //this is TRUE.

-= (вычесть и присвоить)

string -= ( out string A, coerce string B );

Оператор -= удаляет все вхождения строки B из строки A и присваивает результат строке A. Поиск осуществляется с учетом регистра. Если B не является строкой, то будет осуществлена попытка преобразования ее значения в строку.

Пример:

MyString = "test: this is a test";
MyString -= "test";
log(MyString); // prints: ": this is a ";

Функции класса Object

Len

int Len ( coerce string S )

Возвращает длину строки.

Пример:

Len("this"); //returns 4;

InStr

int InStr ( coerce string S, coerce string t )

Функция InStr() возвращает позицию первого вхождения подстроки t в строке S.  Если подстрока не найдена, то InStr возвращает -1. Обратите внимание, что поиск осуществляется с учетом регистра. В случаях, когда необходимо осуществить поиск без учета регистра, перед вызовом InStr воспользуйтесь функцией Caps для преобразования строк. Если S или t не являются строками, то будет осуществлена попытка преобразования их значений в строки.

Пример:

InStr("These PANTS rock!", "PANTS"); //returns 6
InStr("These PANTS rock!", "pants"); //returns -1
InStr( Caps("These PANTS rock!"), Caps("pants") ); //returns 6

Mid

string Mid ( coerce string S, int i, optional int j )

Функция Mid() возвращает подстроку из строки S начиная с символа по индексу i до символа по индексу j символов.  Если j не указан, то копирование осуществляется до конца строки. Индекс i обрезается от 0 до значения длины строки. Индекс j обрезается между и i и значением длины строки. Если S не является строкой, то будет осуществлена попытка преобразования ее значения в строку.

Пример:

Mid("These PANTS rock!", 6, 5); //returns "PANTS"
Mid("These PANTS rock!", 6); //returns "PANTS rock!"

Left

string Left ( coerce string S, int i )

Функция Left() возвращает подстроку из строки S от начала до символа по индексу i, символ по индексу i в результат не включается. Если S не является строкой, то будет осуществлена попытка преобразования ее значения в строку.

Пример:

Left("These PANTS rock!", 5); //returns "These"

Right

string Right ( coerce string S, int i )

Функция Right() возвращает подстроку из строки S начиная с символа по индексу i до конца строки. Если S не является строкой, то будет осуществлена попытка преобразования ее значения в строку.

Пример:

Right("These PANTS rock!", 5); //returns "rock!"

Caps

string Caps ( coerce string S )

Функция Caps() возвращает строку S в верхнем регистре. Если S не является строкой, то будет осуществлена попытка преобразования ее значения в строку.

Пример:

Caps("wooo"); //returns "WOOO"

Locs

string Locs ( coerce string S )

Функция Locs() возвращает строку S в нижнем регистре. Если S не является строкой, то будет осуществлена попытка преобразования ее значения в строку.

Пример:

Locs("WoOo"); //returns "wooo"

Chr

string Chr ( int i )

Функция Chr() возвращает строковое представление целого числа. Результатом может быть любой символ в диапазоне 0 - 65535 таблицы Unicode.

Пример:

Chr(65); //returns "A"

Asc

int Asc ( string S )

Функция Asc() возвращает числовое представление первого символа строки S в таблице Unicode.

Пример:

Asc("A"); //returns 65

Repl

string Repl ( coerce string Src, coerce string Match, coerce string With, optional bool bCaseSensitive )

Функция Repl() заменяет все вхождения подстроки Match на подстроку With в строке Src. Если Src, Match или With не являются строками, то будет осуществлена попытка преобразования их значений в строки.

Пример:

Repl("This is a test", "is", "was"); // produces "Thwas was a test";
Repl("Two be or not two be", "two", "to", true); // returns "Two be or not to be"
Repl("Two be or not two be", "two", "to", false); // returns "to be or not to be"

Split

static final function string Split(coerce string Text, coerce string SplitStr, optional bool bOmitSplitStr)

Функция Split() развивает строку Text в месте первого вхождения SplitStr и возвращает оставшуюся чатсть строки Text. Если bOmitSplitStr истинно, то подстрока SplitStr из результата выбрасывается, а если ложно, то то подстрока SplitStr включается в результат.  Если Text или SplitStr не являются строками, то будет осуществлена попытка преобразования их значений в строки.

Пример:

Split("Unreal Engine uses UnrealScript as its scripting language", "scripting", false); // returns "scripting language"
Split("Unreal Engine uses UnrealScript as its scripting language", "scripting", true); // returns " language"

GetRightMost

string GetRightMost( coerce string Text )

Функция GetRightMost() разбивает строку Text в месте вхождения символа '_' и возврящает остаток строки, например, номер из имени актора. Если Text не является строкой, то будет осуществлена попытка преобразования ее значения в строку.

Пример:

GetRightMost("CoverLink_45"); // returns "45"

JoinArray

JoinArray(array<string> StringArray, out string out_Result, optional string delim = ",", optional bool bIgnoreBlanks = true)

Функция JoinArray() создает единую строку из массива строк StringArray, используя разделитель delim и сохраняет результат в строку out_Result. Если значение bIgnoreBlanks истинно, пустые элементы массива StringArray игнорируются.

Пример:

Maps[0] = "Deck";
Maps[1] = "Necropolis";
Maps[2] = "Sandstorm";
Maps[2] = "Sanctuary";
JoinArray(Maps, MapString); // MapString contains "Deck,Necropolis,Sandstorm,Sanctuary"

ParseStringIntoArray

ParseStringIntoArray(string BaseString, out array<string> Pieces, string Delim, bool bCullEmpty)

Функция ParseStringIntoArray() разбивает строку на массив элементы по разделителю Delim и сохраняет результат в массив строк Pieces. Если значение bCullEmpty истинно, то при обнаружении двух разделителей, идущих подряд, пустые элементы в массив не включаются.

Пример:

ParseStringIntoArray("Deck,Necropolis,,Sandstorm,Sanctuary", Maps, ",", false); // Maps contains {Deck, Necropolis, , Sanstorm, Sanctuary}
ParseStringIntoArray("Deck,Necropolis,,Sandstorm,Sanctuary", Maps, ",", true); // Maps contains {Deck, Necropolis, Sanstorm, Sanctuary}

SplitString

array<string> SplitString( string Source, optional string Delimiter=",", optional bool bCullEmpty )

Функция SplitString() является врапером для функции ParseStringIntoArray(), разбивающей строку на массив элементов. Единственное отличие от функции ParseStringIntoArray() в том, что она возвращает получившийся массив, а не сохраняет его в параметр Pieces.

Пример:

SplitString("Deck,Necropolis,,Sandstorm,Sanctuary", ",", false); // returns array of {Deck, Necropolis, , Sanstorm, Sanctuary}
ParseStringIntoArray("Deck,Necropolis,,Sandstorm,Sanctuary", ",", true); // returns array of {Deck, Necropolis, Sanstorm, Sanctuary}

Функции класса Actor

ReplaceText

function ReplaceText(out string Text, string Replace, string With)

Функция ReplaceText() похожа на функцию Repl() с тем исключетием, что результат сохраняется в исходную строку.

Пример:

Str = "This is a test";
ReplaceText(Str, "is", "was"); // Str contains "Thwas was a test";

Str = "Two be or not two be";
ReplaceText(Str, "two", "to"); // Str contains "Two be or not to be"

GetItemName

String GetItemName( string FullName )

Функция GetItemName() принимает строку вида "Package.Item" и возвращает ее часть, соответствующую "Item".

Пример:

GetItemName(string(self)); // returns the class name
GetItemName("Package.Group.bla.Item"); // return "Item"

Особые замечания

Объединение строк и присваивание

В коде сценариев вам будут встречаться фрагменты, подобные следующему:

for ( i = 0; i < Count; i++ )
{
      if ( MyString != "" )
      {
            MyString = MyString + ", ";
      }
      MyString = MyString + NextArrayValue[i];
}

Есть два строковых оператора для выполнения объединения и присваивания строк:

native(322) static final operator(44) string $= ( out  string A, coerce string B );
native(323) static final operator(44) string @= ( out  string A, coerce string B);

Код, приведенный выше, можно переписать следующим образом:

for ( i = 0; i < Count; i++ )
{
      if ( MyString != "" )
      {
            MyString $= ", ";
      }
      MyString $= NextArrayValue[i];
}

Причина в том, что оператор $= работает быстрее!

На самом деле в двух этих случаях осуществляется следующее:

MyString = MyString + NextArrayValue[i];

MyString $= NextArrayValue[i];

Данный документ является переводом оригинального документа Strings In UnrealScript.

#UDK, #Unreal Development Kit

7 июня 2012