Инструменты пользователя

Инструменты сайта


help:strings

Различия

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

Ссылка на это сравнение

Both sides previous revision Предыдущая версия
Следущая версия
Предыдущая версия
help:strings [2015/04/07 11:12]
108.183.214.104 L6BUnI0Vkz5
help:strings [2015/04/08 00:53] (текущий)
Строка 1: Строка 1:
-I have been so belwederid in the past but now it all makes sensehttp://acrxmcpaxo.com [url=http://qyxmgki.com]qyxmgki[/url] [link=http://urvaohw.com]urvaohw[/link]+[[help:​arrays|Назад:​ Массивы]] 
 + 
 +=====Строки===== 
 + 
 +В QSP есть два типа данных:​ числовой и строковый.\\  
 +Строковый тип данных отличается тем, что в начале названия строковой переменной или массива должен быть символ '​**$**'​.\\  
 +Рекомендуется к названиям всех функций,​ возвращающих строковые значения,​ тоже приписывать символ '​**$**'​ для улучшения читаемости кода. 
 +====Константы==== 
 + 
 +Если с числовыми константами в QSP всё просто (просто записывается числом,​ например,​ 4593), то со строковыми есть несколько нюансов:​ 
 +  * Текстовая константа берётся с двух сторон в кавычки 
 +    * Кавычки могут быть двух видов: апострофы **' '** и прямые кавычки **" "** 
 +    * Если нужно в константу включить кавычки того же вида, нужно написать кавычки два раза подряд:<​sxh qsp> 
 +*PL 'Byte Soft''​s "​QSP"'​ 
 +*PL "Byte Soft's ""​QSP"""​ 
 +!Byte Soft's "​QSP"​ 
 +</​sxh>​ 
 +  * Для текстовых констант сохраняются переносы строк и отступы:<​sxh qsp> 
 +'​Данный текст 
 +будет расположен на 
 +нескольких строках'​ 
 + 
 +$a='И этот 
 +текст 
 +также'​ 
 + 
 +a=2 & act '​Многострочное 
 +название'​:gt '​next'​ 
 +</sxh> 
 +    * При выводе ошибок многострочная (префоматированная) текстовая константа считается за одну строку. 
 +  * Текстовые константы и значения переменных можно объединять двумя способами:​ 
 +    * С помощью оператора конкатенации **&**. Выражение нужно брать в скобки,​ т.к. оператор **&** также разделяет команды:​ <sxh qsp>  
 +$res = ('​x='​ & x & ' y=' & y) &! Результат 'x=5 y=6' 
 +$res = '​x='​ & x &​!'​Результат '​x=',​ а '​5'​ выведется 
 +в основное окно описания.'​ 
 +</sxh> 
 +    * С помощью оператора сложения **+**: <sxh qsp> 
 +$res = '​x='​ + x + ' y=' + y &! Результат 'x=5 y=6' 
 +</​sxh>​ 
 +      * Следует соблюдать осторожность,​ если одно из слагаемых числового типа: <sxh qsp> 
 +x = 1 
 +$res = '​1'​ + x 
 +!Результат '​2'​ вместо '​11'​ 
 +</​sxh>​ 
 + 
 +====Сравнение строк==== 
 + 
 +Строки сравниваются посимвольно,​ начиная с крайнего левого символа.<sxh qsp> 
 +'​ac' ​'​ac'​ 
 +'​bc'​ > '​ac' ​ &! '​b'​ > '​a'​ 
 +'​ac'​ > '​ab' ​ &! '​c'​ > '​b'​ 
 +'​b' ​ > '​ab' ​ &! '​b'​ > '​a'​ 
 +'​ab'​ > '​a' ​  &​! '​b'​ > ''​ 
 +</​sxh>​ 
 + 
 +====Подвыражения==== 
 + 
 +В строковые константы,​ в базовые описания локаций и названия базовых действий существует возможность вставлять значения выражений. Такие "​подвыражения"​ должны находиться между двойных угловых скобок"​**%%<<​%%**"​ и "​**%%>>​%%**",​ до и после которых может идти любой текст, включая подобные "​подвыражения"​. 
 + 
 +<sxh qsp> 
 +pl '​i='​+str(i) 
 +!эквивалентно 
 +pl '​i=<<​i>>'​ 
 + 
 +число_гоблинов=5 
 +'​Тебя окружили <<​число_гоблинов>>​ гоблинов!'​ 
 + 
 +pl '​Вас зовут <<​$PlayerName>>,​ вы находитесь в <<​$curloc>>​.'​ 
 + 
 +!Вложенные подвыражения:​ 
 +pl val('<<​val("<<​i>>"​)>><<​j>>'​) 
 +pl val('<<​str(val("<<​i>>"​))>>'​) 
 +!'​При использовании вложенных подвыражений 
 +необходимо использовать вложенные строковые константы'​ 
 +</​sxh>​ 
 + 
 +Если нужно вывести последовательность "​**%%<<​%%**"​ на экран, можно использовать два способа:​ 
 +  * Разбить '​**%%<<​%%**'​ на '​**<​**'​+'​**<​**':​ <sxh qsp> 
 +$text = '<'​+'<​var>>'​ 
 +'​string <'​+'<​var>>'​ 
 +</​sxh>​ 
 +  * **DISABLESUBEX** - системная переменная,​ "​выключающая"​ подвыражения при неравенстве 0:<sxh qsp> 
 +DISABLESUBEX=1 
 +$text = '<<​var>>'​ 
 +'​string <<​var>>'​ 
 +DISABLESUBEX=0 
 +</​sxh>​ 
 +====Функции==== 
 + 
 +  * **LEN(**//​[$стр]//​**)** - возвращает длину строки //[$стр]//. 
 +  * **MID(**//​[$стр]//**,**//[#​начало]//​**,​**//​[#​длина]//**)** - вырезает из строки //[$стр]// строку,​ которая начинается с символа номер //​[#​начало]//​ и имеет длину //​[#​длина]//​. Индексация символов в строке ведётся с 1. 
 +    * Параметр //​[#​длина]//​ может отсутствовать,​ при этом вырезается вся строка,​ начиная с символа //​[#​начало]//​.  
 +    * //​Примеры://<sxh qsp> 
 +$MID('​abcd',​ 1, 2) &! '​ab'​ 
 +$MID('​abcd',​ 2, 3) &! '​bcd'​ 
 +$MID('​abcd',​ 2)    &! '​bcd'​ 
 +</​sxh>​ 
 +  * **UCASE(**//​[$стр]//​**)** - возвращает строку больших букв, полученную изменением регистра букв исходной строки //​[$стр]//​<sxh qsp>​$UCASE('​TexT#'​) &! '​TEXT#'</​sxh>​ 
 +  * **LCASE(**//​[$стр]//**)** - возвращает строку маленьких букв, полученную изменением регистра букв исходной строки //[$стр]//. <sxh qsp>​$LCASE('​TExT#'​) &! '​text#'</​sxh>​ 
 +  * **TRIM(**//​[$стр]//​**)** - удаляет прилегающие пробелы и символы табуляции из //​[$стр]//​ и возвращает полученную строку. <sxh qsp>​$TRIM('​ TRIM TEST ') &! 'TRIM TEST'</​sxh>​ 
 +  * **REPLACE(**//​[$стр]//​**,​**//​[$поиск]//​**,​**//​[$замена]//​**)** - заменяет в строке //​[$стр]//​ все вхождения строки //​[$поиск]//​ строкой //​[$замена]//​. 
 +    * Параметр //​[$замена]//​ может отсутствовать и принимается равным пустой строке. 
 +    * //​Примеры://<​sxh qsp> 
 +$REPLACE('​test',​ '​12',​ '​4'​) &! '​test'​ 
 +$REPLACE('​test',​ '​e',​ '​s'​) ​ &! '​tsst'​ 
 +$REPLACE('​test',​ '​t',​ '​34'​) &! '​34es34'​ 
 +$REPLACE('​test',​ '​t'​) ​      &​! '​es'​ 
 +</​sxh>​ 
 +  * **INSTR(**//​[#​начало]//​**,​**//​[$строка]//​**,​**//​[$поиск]//​**)** - возвращает номер позиции символа,​ с которого начинается вхождение строки //​[$поиск]//​ в строку //​[$строка]//​ (или 0, если такой строки нет). Поиск начинается с символа номер //​[#​начало]//​. 
 +    * Параметр //​[#​начало]//​ может отсутствовать,​ при этом он принимается равным **1**. 
 +    * **Важно:​** в более новых версиях (//Quest Navigator//​) необязательный параметр //​[#​начало]//​ переставлен последним((**INSTR(**//​[$строка]//​**,​**//​[$поиск]//​**,​**//​[#​начало]//​**)**)). 
 +    * //​Примеры://<​sxh qsp> 
 +INSTR(1,'​ABCDefgh','​BC'​) &! 2 
 +INSTR(1,'​ABCDefgh','​Be'​) &! 0 
 +INSTR('​abcdef','​abc'​) ​   &! 1 
 +</​sxh>​ 
 +  * **ISNUM(**//​[$строка]//​**)** - функция проверяет,​ является ли строка [$строка] числом. Функция возвращает 0 (ложь) или -1 (истина). <sxh qsp> 
 +ISNUM('​ 9999 ') &! -1 
 +ISNUM('​ -888'​) ​ &! -1 
 +ISNUM('​777a6'​) ​ &! 0 
 +ISNUM(''​) ​      &​! -1, т.к. пустая строка считается нулём 
 +</​sxh>​ 
 +  * **VAL(**//​[$стр]//​**)** - переводит строку цифр //​[$стр]//​ в соответствующее число. При ошибке возвращается 0.<sxh qsp>​яблоки = VAL($яблоки)</​sxh>​ 
 +  * **STR(**//​[#​число]//​**)** - переводит число (числовое выражение) в соответствующую строку. <sxh qsp>PL STR(56)</​sxh>​ 
 + 
 +===Функции использующие регулярные выражения=== 
 + 
 +  * **STRCOMP(**//​[$строка]//​**,​**//​[$шаблон]//​**)** - проводит сравнение строки //​[$строка]//​ на соответствие регулярному выражению //​[$шаблон]//​. Возвращает -1, если строка соответствует шаблону,​ иначе 0. Сравни с функцией "​STRFIND"​. 
 +  * **STRFIND(**//​[$строка]//​**,​**//​[$шаблон]//​**,​**//​[#​номер]//​**)** - возвращает подстроку в строке //​[$строка]//,​ соответствующую группе с номером //​[#​номер]//​ регулярного выражения //​[$шаблон]//​. 
 +    * Если подстрока с указанным номером отсутствует,​ то возвращается пустая строка. 
 +    * Нумерация групп подстрок начинается с 1. 
 +    * Если параметр [#​номер] отсутствует или равен 0, то возвращаются подстрока,​ соответсвующая всему регулярному выражению. 
 +    * //​Примеры://<​sxh qsp> 
 +STRFIND('​ идти к пещере',​ '​^(\S+)\s(\S+)\s(\S+)$',​ 0) &! ''​ 
 +STRFIND('​идти к пещере',​ '​^(\S+)\s(\S+)\s(\S+)$',​ 1)  &! '​идти'​ 
 +STRFIND('​идти к пещере',​ '​^(\S+)\s(\S+)\s(\S+)$',​ 2)  &! '​к'​ 
 +STRFIND('​идти к пещере',​ '​^(\S+)\s(\S+)\s(\S+)$',​ 3)  &! '​пещере'​ 
 +STRFIND('​идти к дому',​ '​к\s(\S+)',​ 0) &! 'к дому'​  
 +STRFIND('​идти к дому',​ '​к\s(\S+)'​) ​   &! 'к дому'​ 
 +STRFIND('​идти к дому',​ '​к\s(\S+)',​ 1) &! '​дому'​ 
 +STRFIND('​идти к своему дому',​ '​к\s(\S+)',​ 1) &! '​своему'​ 
 +</​sxh>​ 
 +  * **STRPOS(**//​[$строка]//​**,​**//​[$шаблон]//​**,​**//​[#​номер]//​**)** - возвращает позицию символа,​ с которого начинается вхождение подстроки в строку //​[$строка]//,​ соответствующей группе с номером //​[#​номер]//​ регулярного выражения //​[$шаблон]//​. 
 +    * Если подстрока с указанным номером отсутствует,​ то возвращается 0. 
 +    * Нумерация групп подстрок начинается с 1. 
 +    * Если параметр //​[#​номер]//​ отсутствует или равен 0, то возвращается позиция символа,​ с которого начинается вхождение подстроки,​ соответствующей всему регулярному выражению. 
 +    * //​Примеры://<​sxh qsp> 
 +STRPOS('​ идти к пещере',​ '​^(\S+)\s(\S+)\s(\S+)$',​ 0) &! 0 
 +STRPOS('​идти к пещере',​ '​^(\S+)\s(\S+)\s(\S+)$',​ 1)  &! 1 
 +STRPOS('​идти к пещере',​ '​^(\S+)\s(\S+)\s(\S+)$',​ 2)  &! 6 
 +STRPOS('​идти к пещере',​ '​^(\S+)\s(\S+)\s(\S+)$',​ 3)  &! 8 
 +STRPOS('​идти к пещере',​ '​^(\S+)\s(\S+)(\s(\S+))?​$',​ 4) &! 8 
 +STRPOS('​идти к дому',​ '​к\s(\S+)',​ 0) &! 6 
 +STRPOS('​идти к дому',​ '​к\s(\S+)'​) ​   &! 6 
 +STRPOS('​идти к дому',​ '​к\s(\S+)',​ 1) &! 8 
 +STRPOS('​идти к своему дому',​ '​к\s(\S+)',​ 1) &! 8 
 +</​sxh>​ 
 + 
 +---- 
 +[[help:​regexp|Вперёд:​ Регулярные выражения]]
help/strings.txt · Последние изменения: 2015/04/08 00:53 (внешнее изменение)