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

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


Боковая панель

help:strings

Это старая версия документа.


Назад: Массивы

Строки

В QSP есть два типа данных: числовой 1) и строковый.
Строковый тип данных отличается тем, что в начале названия строковой переменной или массива должен быть символ '$'.
Рекомендуется к названиям всех функций, возвращающих строковые значения, тоже приписывать символ '$' для улучшения читаемости кода.

Константы

Если с числовыми константами в QSP всё просто (просто записывается числом, например, 4593), то со строковыми есть несколько нюансов:

  • Текстовая константа берётся с двух сторон в кавычки
    • Кавычки могут быть двух видов: апострофы ' ' и прямые кавычки " "
    • Если нужно в константу включить кавычки того же вида, нужно написать кавычки два раза подряд:
      *PL 'Byte Soft''s "QSP"'
      *PL "Byte Soft's ""QSP"""
      !Byte Soft's "QSP"
      

$res = ('x=' & x & ' y=' & y) &! Результат 'x=5 y=6' $res = 'x=' & x &! Результат 'x=', а '5' выведется в основное окно описания.

10) Для подвыражений, если нужно вывести последовательность "«" на экран, используйте системную переменную "DISABLESUBEX". К примеру:

DISABLESUBEX=1
$text = '<<var>>'
'string <<var>>'
DISABLESUBEX=0

Числовая константа записывается числом (например, 4535), а текстовая берётся с двух сторон в кавычки. Кавычками могут быть либо апострофы ('), либо прямые кавычки ("). Две подряд идущие кавычки считаются кавычкой, включённой в текстовую константу. Т.е. после выполнения строк

*PL 'Byte Softs QSP' *PL "Byte Soft's ""QSP""" вы увидите строки Byte Soft's QSP Byte Soft's "QSP" Существует возможность использования преформатированных текстовых констант. Для таких констант сохраняются переносы строк и отступы. Примеры: 'Данный текст будет расположен на нескольких строках' $a='И этот текст также' a=2 & act 'Многострочное название':gt 'next' PS: Строки, содержащие преформатированную текстовую константу, считаются ОДНОЙ строкой (сообщения об ошибках также выводятся с учётом того, что это одна строка). В зависимости от результата вычисления выражения могут быть либо строковыми, либо числовыми. Примеры числовых выражений: 3+4*3*4 (val('25')*4)/(2*5) был_в_комнате = 0 $был_в_комнате = 'нет' 1 AND 1 OR 0 A=B AND (C<>D OR 2=E+3) $str1 = $str2 AND $str2 <> $str3 Примеры строковых выражений: 'строка' "проверка" "преформатированная текстовая константа" mid("строка",1,2) $VAR $VAR + ' строка ' Складывать с помощью "+" можно не только числа (значения числовых выражений), но и объединять текстовые константы (значения строковых выражений). Также для объединения строковых значений можно использовать символ "&", при этом такое объединение должно быть заключено в скобки. Например, *PL 'The '+'door '+'is closed.' и *PL ('The '&'door '&'is closed.') выведут одно и то же: "The door is closed.". Возможна ЛЮБАЯ комбинация констант, переменных, функций. При вычислении значений выражений движок (по возможности) конвертирует типы данных автоматически. В строковые константы, в базовые описания локаций и названия базовых действий существует возможность вставлять значения выражений. Такие "подвыражения" должны находиться между двойных угловых скобок: "«" и "»", до и после которых может идти любой текст, включая подобные "подвыражения". Например, вместо оператора pl 'i='+str(i) можно написать pl 'i=«i»' Ещё примеры: число_гоблинов=5 'Тебя окружили «число_гоблинов» гоблинов!' pl 'Вас зовут «$PlayerName», вы находитесь в «$curloc».' Примеры использования вложенных "подвыражений": pl val('«val("«i»")»«j»') pl val('«str(val("«i»"))»') Так как "подвыражения" вычисляются внутри строковых констант, то для вычисления вложенного "подвыражения" необходимо присутствие вложенной строковой константы. PS: Смотрите раздел "Использование массивов" этой части документации, чтобы получить дополнительную информацию о возможных выражениях. ====Операторы и функции==== DISABLESUBEX - если значение переменной не равно 0, то запрещает использование "подвыражений" в тексте (например, значением '«5+6»' будет строка '«5+6»', а не '11'). LEN([$выражение]) - возвращает длину строки [$выражение]. MID([$выражение],[#выражение 1],[#выражение 2]) - вырезает из строки [$выражение] строку, которая начинается с символа номер [#выражение 1] и имеет длину [#выражение 2]. Индексация символов в строке ведётся с 1. Параметр [#выражение 2] может отсутствовать, при этом вырезается вся строка, начиная с символа [#выражение 1]. Примеры: MID('abcd', 1, 2) равно 'ab' MID('abcd', 2, 3) равно 'bcd' MID('abcd', 2) равно 'bcd' UCASE([$выражение]) - возвращает строку больших букв, полученную изменением регистра букв исходной строки [$выражение]. Пример: UCASE('TexT#') равно 'TEXT#' LCASE([$выражение]) - возвращает строку маленьких букв, полученную изменением регистра букв исходной строки [$выражение]. Пример: LCASE('TExT#') равно 'text#' TRIM([$выражение]) - удаляет прилегающие пробелы и символы табуляции из [$выражение]. Затем возвращает полученную строку. Пример: TRIM(' TRIM TEST ') равно 'TRIM TEST' REPLACE([$выражение 1],[$выражение 2],[$выражение 3]) - заменяет в строке [$выражение 1] все вхождения строки [$выражение 2] строкой [$выражение 3]. Если [$выражение 3] отсутствует или указана пустая строка, то удаляет в исходной строке все вхождения искомой строки. Примеры: REPLACE('test', '12', '4') равно 'test' REPLACE('test', 'e', 's') равно 'tsst' REPLACE('test', 't', '34') равно '34es34' REPLACE('test', 't') равно 'es' INSTR([#выражение 1],[$выражение 2],[$выражение 3]) - возвращает номер позиции символа, с которого начинается вхождение строки [$выражение 3] в строку [$выражение 2] (или 0, если такой строки нет). Поиск начинается с символа номер [#выражение 1]. Параметр [#выражение 1] может отсутствовать, при этом он принимается равным 1. Примеры: INSTR(1,'ABCDefgh','BC') равно 2 INSTR(1,'ABCDefgh','Be') равно 0 INSTR('abcdef','abc') равно 1 ISNUM([$выражение]) - функция проверяет, все ли символы в строке являются цифрами (учитывая знак "-" в начале, прилегающие пробелы и символы табуляции). Если в указанной строке есть хотя бы один символ - не-цифра (исключая возможный "-" в начале и прилегающие пробелы / символы табуляции), то функция возвращает 0 (ложь), иначе -1 (истина). Функция полезна при проверке введённой играющим строки на число. Примеры: ISNUM('9999 ') равно -1 ISNUM(' -888') равно -1 ISNUM('777a6') равно 0 VAL([$выражение]) - переводит строку цифр [$выражение] в соответствующее число. Если [$выражение] равно (пустая строка) или если оно содержит не-цифры, то возвращается 0.

STR([#выражение]) - переводит число (числовое выражение) [#выражение] в соответствующую строку. Например,

PL STR(56)

выведет строку "56".

STRCOMP([$выражение],[$шаблон]) - проводит сравнение строки [$выражение] на соответствие регулярному выражению [$шаблон]. Возвращает -1, если строка соответствует шаблону, иначе 0. Сравни с функцией "STRFIND".

STRFIND([$выражение],[$шаблон],[#номер]) - возвращает подстроку в строке [$выражение], соответствующую группе с номером [#номер] регулярного выражения [$шаблон]. Если подстрока с указанным номером отсутствует, то возвращается пустая строка. Нумерация групп подстрок начинается с 1. Если параметр [#номер] отсутствует или равен 0, то возвращается подстрока, соответствующая всему регулярному выражению [$шаблон]. Примеры:

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(\S+)(\s(\S+))?$', 4) = 'пещере' STRFIND('искать ключ', '^(\S+)\s(\S+)(\s(\S+))?$', 1) = 'искать' STRFIND('искать', '^(\S+)\s(\S+)(\s(\S+))?$', 0) =

STRFIND('искать', '^(\S+)\s(\S+)(\s(\S+))?$', 1) = ''

STRFIND('искать', '^(\S+)(\s(\S+)(\s(\S+))?)?$', 1) = 'искать'

STRFIND('идти к дому', 'к\s(\S+)', 0) = 'к дому'

STRFIND('идти к дому', 'к\s(\S+)') = 'к дому'

STRFIND('идти к дому', 'к\s(\S+)', 1) = 'дому'

STRFIND('идти к своему дому', 'к\s(\S+)', 1) = 'своему'

STRPOS([$выражение],[$шаблон],[#номер]) - возвращает позицию символа, с которого начинается вхождение подстроки в строке [$выражение], соответствующей группе с номером [#номер] регулярного выражения [$шаблон]. Если подстрока с указанным номером отсутствует, то возвращается 0. Нумерация групп подстрок начинается с 1. Если параметр [#номер] отсутствует или равен 0, то возвращается позиция символа, с которого начинается вхождение подстроки, соответствующей всему регулярному выражению [$шаблон].

Примеры:

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(\S+)(\s(\S+))?$', 1) = 1

STRPOS('искать', '^(\S+)\s(\S+)(\s(\S+))?$', 0) = 0

STRPOS('искать', '^(\S+)\s(\S+)(\s(\S+))?$', 1) = 0

STRPOS('искать', '^(\S+)(\s(\S+)(\s(\S+))?)?$', 1) = 1

STRPOS('идти к дому', 'к\s(\S+)', 0) = 6

STRPOS('идти к дому', 'к\s(\S+)') = 6

STRPOS('идти к дому', 'к\s(\S+)', 1) = 8

STRPOS('идти к своему дому', 'к\s(\S+)', 1) = 8

1) целочисленный
help/strings.1382175688.txt.gz · Последние изменения: 2013/10/19 13:41 (внешнее изменение)