Здесь показаны различия между двумя версиями данной страницы.
Both sides previous revision Предыдущая версия Следущая версия | Предыдущая версия | ||
help:strings [2023/01/01 16:39] aleks_versus |
help:strings [2024/12/01 10:12] (текущий) aleks_versus |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | |||
[[help:arrays|Назад: Массивы]] | [[help:arrays|Назад: Массивы]] | ||
====== Строки ====== | ====== Строки ====== | ||
+ | В **QSP** есть три типа данных: числовой, строковый и кортежи. В данном разделе мы рассмотрим строковый тип данных и способы работы с ним. | ||
- | В **QSP** есть два типа данных: числовой и строковый. В данном разделе мы рассмотрим строковый тип данных и способы работы с ним. | + | Если мы присваиваем строковое значение переменной, перед именем такой переменной обязательно нужно ставить символ ''%%$%%''. То же самое, если мы //извлекаем// строковое значение из переменной. |
- | + | ||
- | Если мы присваиваем строковое значение переменной, перед именем такой переменной обязательно нужно ставить символ ''**$**''. То же самое, если мы //извлекаем// строковое значение из переменной. | + | |
<sxh qsp> | <sxh qsp> | ||
- | $text="Зелёное яблоко" &! помещаем строковое значение в переменную | + | $text = "Зелёное яблоко" &! помещаем строковое значение в переменную |
*pl $text &! выводим на экран значение строковой переменной | *pl $text &! выводим на экран значение строковой переменной | ||
</sxh> | </sxh> | ||
- | Также рекомендуется к названиям всех функций, возвращающих строковые значения, приписывать символ ''**$**'' для улучшения читаемости кода. | + | Также рекомендуется к названиям всех функций, возвращающих строковые значения, приписывать символ ''%%$%%'' для улучшения читаемости кода. |
<sxh qsp> | <sxh qsp> | ||
Строка 24: | Строка 22: | ||
===== Константы ===== | ===== Константы ===== | ||
- | Под константой следует понимать одно конкретное значение. Например, число ''1441'' — это числовая константа, а строка ''"Зелёные яблоки"'' — это строковая константа. | + | Под константой следует понимать одно конкретное значение. Например, число ''%%1441%%'' — это числовая константа, а строка ''%%"Зелёные яблоки"%%'' — это строковая константа. |
- | Если с числовыми константами в **QSP** всё просто (записываем число, используя набор цифр; например, ''4953''), то со строковыми есть несколько нюансов: | + | Если с числовыми константами в **QSP** всё просто (записываем число, используя набор цифр; например, ''%%4953%%''), то со строковыми есть несколько нюансов: |
- | * Строковая константа берётся с двух сторон в кавычки (обрамляется кавычками). | + | * Строковая константа берётся с двух сторон в кавычки (обрамляется кавычками). |
- | * Кавычки могут быть двух видов: апострофы ''**' '**'' и прямые кавычки ''**" "**''. | + | * Кавычки могут быть двух видов: апострофы ''%%' '%%'' и прямые кавычки ''%%" "%%''. |
- | * Если нужно в константу включить кавычки того же вида, нужно написать их два раза подряд (//экранировать через дублирование//):<sxh qsp> | + | * Если нужно в константу включить кавычки того же вида, нужно написать их два раза подряд (//экранировать через дублирование//): <sxh qsp> |
- | *PL 'Byte Soft''s "QSP"' | + | *PL 'Byte Soft''s "QSP"' |
- | *PL "Byte Soft's ""QSP""" | + | *PL "Byte Soft's ""QSP""" |
- | !Byte Soft's "QSP" | + | !Byte Soft's "QSP" |
</sxh> | </sxh> | ||
- | * В строковых константах сохраняются переносы строк и отступы:<sxh qsp> | + | * В строковых константах сохраняются переносы строк и отступы:<sxh qsp> |
- | 'Данный текст | + | 'Данный текст |
- | будет расположен на | + | будет расположен на |
- | нескольких строках' | + | нескольких строках' |
- | $a='И этот | + | $a='И этот |
- | текст | + | текст |
- | также' | + | также' |
- | a=2 & act 'Многострочное | + | a=2 & act 'Многострочное |
- | название':gt 'next' | + | название': gt 'next' |
</sxh> | </sxh> | ||
- | * Если ошибка допущена внутри строковой константы, то вся многострочная константа будет считаться одной строкой при выводе ошибки.<sxh qsp> | + | * Если ошибка допущена внутри строковой константы, то вся многострочная константа будет считаться одной строкой при выводе ошибки.<sxh qsp> |
! ошибка указывается во второй строке | ! ошибка указывается во второй строке | ||
*pl "Хотя на самом | *pl "Хотя на самом | ||
деле ошибка | деле ошибка | ||
в четвёртой <<"строке">>"</sxh> | в четвёртой <<"строке">>"</sxh> | ||
- | * Текстовые константы и значения переменных можно объединять двумя способами: | + | * Текстовые константы и значения переменных можно объединять двумя способами: |
- | * С помощью оператора конкатенации ''**&**''. Выражение нужно брать в скобки, т.к. существует ещё разделитель команд ''**&**'':<sxh qsp> | + | * С помощью оператора конкатенации ''**&**''. Выражение нужно брать в скобки, т.к. существует ещё разделитель команд ''**&**'':<sxh qsp> |
- | ! В переменную $res запишется 'x=5 y=6': | + | ! В переменную $res запишется 'x=5 y=6': |
- | $res = ('x=' & x & ' y=' & y) | + | $res = ('x=' & x & ' y=' & y) |
- | ! В переменную $res запишется 'x=', | + | ! В переменную $res запишется 'x=', |
- | ! а '5' выведется в основное окно описания: | + | ! а '5' выведется в основное окно описания: |
- | $res = 'x=' & x | + | $res = 'x=' & x |
</sxh> | </sxh> | ||
- | * С помощью оператора сложения ''**+**'': <sxh qsp> | + | * С помощью оператора сложения ''**+**'': <sxh qsp> |
- | ! Результат 'x=5 y=6': | + | ! Результат 'x=5 y=6': |
- | $res = 'x=' + x + ' y=' + y | + | $res = 'x=' + x + ' y=' + y |
</sxh> | </sxh> | ||
- | * Следует соблюдать осторожность, если одно из слагаемых числового типа: <sxh qsp> | + | * Следует соблюдать осторожность, если одно из слагаемых числового типа: <sxh qsp> |
- | x = 1 | + | x = 1 |
- | $res = '1' + x | + | $res = '1' + x |
- | !Результат '2' вместо '11' | + | !Результат '2' вместо '11' |
</sxh> | </sxh> | ||
Строка 92: | Строка 90: | ||
</sxh> | </sxh> | ||
- | Есть способ записи, когда нам не приходится экарнировать кавычки вообще. Мы просто заключаем ссылку в фигурные скобки: | + | Есть способ записи, когда нам не приходится экранировать кавычки вообще. Мы просто заключаем ссылку в фигурные скобки (не рекомендуется): |
<sxh qsp> | <sxh qsp> | ||
Строка 102: | Строка 100: | ||
<sxh qsp> | <sxh qsp> | ||
*p '<a href="EXEC:' + " goto 'Верстак' " + ' " class="plain">Верстак</a>' | *p '<a href="EXEC:' + " goto 'Верстак' " + ' " class="plain">Верстак</a>' | ||
- | </sxh> | ||
- | |||
- | Во всех предыдущих способах мы либо экранировали кавычки от кода **QSP**, либо пытались избежать экранирования (чтобы сам плеер правильно читал строки), но ещё есть способ, который позволяет экранировать кавычки от HTML. Таким способом мы можем экранировать кавычки внутри атрибутов. Этот способ нужно **применять осторожно**, поскольку не всякий плеер поддерживает подобное экранирование, а при выводе строк в режиме с отключенным распознаванием HTML, мы увидим на экране "лишние" символы. То есть этот способ не эквивалентен всем предыдущим. | ||
- | |||
- | <sxh qsp> | ||
- | ! кавычки внутри атрибута экранируются от кавычек атрибута: | ||
- | *p '<a href="EXEC: goto \"Верстак\" " class="plain">Верстак</a>' | ||
- | ! кавычки внутри атрибута заменяются на код специального символа: | ||
- | *p '<a href="EXEC: goto "Верстак" " class="plain">Верстак</a>' | ||
</sxh> | </sxh> | ||
Строка 138: | Строка 127: | ||
===== Подвыражения ===== | ===== Подвыражения ===== | ||
- | **QSP** позволяет вставлять значения различных выражений в строковые константы, а так же в базовые описания локаций и названия базовых действий. Для этого используются специальные конструкции из двойных угловых скобок: ''**%%<<%%**'' и ''**%%>>%%**''. Выражения, помещённые в такие двойные угловые скобки, называются **подвыражениями**, или **вложенными выражениями**. | + | **QSP** позволяет вставлять значения различных выражений в строковые константы, а так же в базовые описания локаций и названия базовых действий. Для этого используются специальные конструкции из двойных угловых скобок: ''%%<<%%'' и ''%%>>%%''. Выражения, помещённые в такие двойные угловые скобки, называются **подвыражениями**, или **вложенными выражениями**. |
Примеры: | Примеры: | ||
Строка 173: | Строка 162: | ||
</sxh> | </sxh> | ||
- | Если нужно последовательность ''**%%<<%%**'' вывести на экран, или поместить в переменную, можно воспользоваться одним из этих способов: | + | Если нужно последовательность ''%%<<%%'' вывести на экран, или поместить в переменную, можно воспользоваться одним из этих способов: |
- | * Разбить ''**%%<<%%**'' на '''**<**'+'**<**''':<sxh qsp> | + | * Разбить ''%%<<%%'' на ''%%'<'+'<%%''': <sxh qsp> |
- | $text = '<'+'<var>>' | + | $text = '<'+'<var>>' |
- | 'string <'+'<var>>' | + | 'string <'+'<var>>' |
</sxh> | </sxh> | ||
- | * Использовать фигурные скобки:<sxh qsp> | + | * Использовать фигурные скобки: <sxh qsp> |
- | $text={<<var>>} | + | $text={<<var>>} |
- | *pl {string <<var>>} | + | *pl {string <<var>>} |
</sxh> | </sxh> | ||
- | Фигурные скобки — это ещё один способ создавать строковые константы. При их использовании создаются точно такие же строковые константы, как и в случае с обычными кавычками, однако в таких константах не раскрываются подвыражения. К тому же текст, размещённый в фигурных скобках не подсвечивается непосредственно как текст различными редакторами (например, Quest Generator), а подсвечивается как обычный код. Поэтому фигурные скобки обычно используют для создания [[help:dynamical|динамического кода]]. | + | **Фигурные скобки** — это ещё один способ создавать строковые константы. При их использовании создаются точно такие же строковые константы, как и в случае с обычными кавычками, однако в таких константах не раскрываются подвыражения. К тому же текст, размещённый в фигурных скобках не подсвечивается непосредственно как текст различными редакторами (например, Quest Generator), а подсвечивается как обычный код. Поэтому фигурные скобки обычно используют для создания [[help:dynamical|динамического кода]]. |
<sxh qsp> | <sxh qsp> | ||
- | *pl { | + | *pl { |
- | Это текст в фигурных скобках, | + | Это текст в фигурных скобках, |
- | здесь не раскрываются <<подвыражения>> | + | здесь не раскрываются <<подвыражения>> |
- | } | + | } |
- | dynamic { | + | dynamic { |
- | ! обычно в фигурных | + | ! обычно в фигурных |
- | ! скобках размещают | + | ! скобках размещают |
- | *pl "Код для оператора DYNAMIC" | + | *pl "Код для оператора DYNAMIC" |
- | } | + | } |
</sxh> | </sxh> | ||
===== Функции ===== | ===== Функции ===== | ||
- | * ''**LEN(**[$стр]**)**'' - возвращает длину строки ''[$стр]''.<sxh qsp> | + | * ''%%LEN([$стр])%%'' - возвращает длину строки ''%%[$стр]%%''. <sxh qsp> |
- | *pl len('Зелёные яблоки') &! на экране будет число 14 | + | *pl len('Зелёные яблоки') &! на экране будет число 14 |
</sxh> | </sxh> | ||
- | * ''**$MID(**[$стр]**,**[#начало]**,**[#длина]**)**'' - вырезает из строки ''[$стр]'' строку, которая начинается с символа номер ''[#начало]'' и имеет длину ''[#длина]''. Нумерация символов в строке ведётся с **1**. | + | * ''**$MID(**[$стр],[#начало],[#длина]**)**'' - вырезает из строки ''%%[$стр]%%'' строку, которая начинается с символа номер ''%%[#начало]%%'' и имеет длину ''%%[#длина]%%''. Нумерация символов в строке ведётся с **1**. |
- | * Параметр ''[#длина]'' может отсутствовать, при этом вырезается вся строка, начиная с символа ''[#начало]''. | + | * Параметр ''%%[#длина]%%'' может отсутствовать, при этом вырезается вся строка, начиная с символа ''%%[#начало]%%''. |
- | * Если ''[#начало]'' превышает длину строки, функция возвращает пустую строку. | + | * Если ''%%[#начало]%%'' превышает длину строки, функция возвращает пустую строку. |
- | * Примеры:<sxh qsp> | + | * Примеры: <sxh qsp> |
- | $MID('abcd', 1, 2) &! 'ab' | + | $MID('abcd', 1, 2) &! 'ab' |
- | $MID('abcd', 2, 3) &! 'bcd' | + | $MID('abcd', 2, 3) &! 'bcd' |
- | $MID('abcd', 2) &! 'bcd' | + | $MID('abcd', 2) &! 'bcd' |
- | $mid('abcd',5) &! '' (пустая строка) | + | $mid('abcd',5) &! '' (пустая строка) |
</sxh> | </sxh> | ||
- | * ''**$UCASE(**[$стр]**)**'' - возвращает строку больших букв, полученную изменением регистра букв исходной строки ''[$стр]''.<sxh qsp> | + | * ''%%$UCASE([$стр])%%'' - возвращает строку больших букв, полученную изменением регистра букв исходной строки ''%%[$стр]%%''. <sxh qsp> |
- | $UCASE('TexT#') &! 'TEXT#' | + | $UCASE('TexT#') &! 'TEXT#' |
</sxh> | </sxh> | ||
- | * ''**$LCASE(**[$стр]**)**'' - возвращает строку маленьких букв, полученную изменением регистра букв исходной строки ''[$стр]''.<sxh qsp> | + | * ''%%$LCASE([$стр])%%'' - возвращает строку маленьких букв, полученную изменением регистра букв исходной строки ''%%[$стр]%%''. <sxh qsp> |
- | $LCASE('TExT#') &! 'text#' | + | $LCASE('TExT#') &! 'text#' |
</sxh> | </sxh> | ||
- | * ''**$TRIM(**[$стр]**)**'' - удаляет прилегающие пробелы и символы табуляции из ''[$стр]'' и возвращает полученную строку. <sxh qsp> | + | * ''%%$TRIM([$стр])%%'' - удаляет прилегающие пробелы и символы табуляции из ''%%[$стр]%%'' и возвращает полученную строку. <sxh qsp> |
- | $TRIM(' TRIM TEST ') &! 'TRIM TEST' | + | $TRIM(' TRIM TEST ') &! 'TRIM TEST' |
</sxh> | </sxh> | ||
- | * ''**$REPLACE(**[$стр]**,**[$поиск]**,**[$замена]**)**'' - заменяет в строке ''[$стр]'' все вхождения строки ''[$поиск]'' строкой ''[$замена]''. | + | * ''**$REPLACE(**[$стр],[$поиск],[$замена],[#количество_замен]**)**'' - заменяет в строке ''%%[$стр]%%'' несколько вхождений строки ''%%[$поиск]%%'' строкой ''%%[$замена]%%''. Замена производится слева-направо и только для неперескающихся вхождений. |
- | * Параметр ''[$замена]'' может отсутствовать и принимается равным пустой строке. | + | * Параметр ''[#количество_замен]'' показывает, сколько вхождений должно быть заменено. Если параметр не указан, производится замена всех вхождений. |
- | * Примеры:<sxh qsp> | + | * Параметр ''%%[$замена]%%'' может отсутствовать, тогда он принимается равным пустой строке. |
- | $REPLACE('test', '12', '4') &! 'test' | + | * Примеры: <sxh qsp> |
- | $REPLACE('test', 'e', 's') &! 'tsst' | + | $REPLACE('test', '12', '4') &! 'test' |
- | $REPLACE('test', 't', '34') &! '34es34' | + | $REPLACE('test', 'e', 's') &! 'tsst' |
- | $REPLACE('test', 't') &! 'es' | + | $REPLACE('test', 't', '34') &! '34es34' |
+ | $REPLACE('test', 't') &! 'es' | ||
+ | |||
+ | $REPLACE('test', 't', 'qu', 1) &! 'quest' | ||
+ | $REPLACE('test my test', 't', 'q', 3) &! 'qesq my qest' | ||
</sxh> | </sxh> | ||
- | * ''**INSTR(**[$строка]**,**[$поиск]**,**[#начало]**)**'' - возвращает номер позиции символа, с которого начинается вхождение строки ''[$поиск]'' в строку ''[$строка]'' (или **0**, если вхождения нет). Поиск начинается с символа номер ''[#начало]''. | + | * ''%%INSTR([$строка],[$поиск],[#начало])%%'' - возвращает номер позиции символа, с которого начинается вхождение строки ''%%[$поиск]%%'' в строку ''%%[$строка]%%'' (или **0**, если вхождения нет). Поиск начинается с символа номер ''%%[#начало]%%''. |
- | * Параметр ''[#начало]'' может отсутствовать, при этом он принимается равным **1**. | + | * Параметр ''%%[#начало]%%'' может отсутствовать, при этом он принимается равным **1**. |
- | * Примеры:<sxh qsp> | + | * Примеры: |
- | INSTR('ABCDefgh','BC',1) &! 2 | + | <sxh qsp> |
- | INSTR('ABCDefgh','Be',1) &! 0 | + | INSTR('ABCDefgh','BC',1) &! 2 |
- | INSTR('abcdef','abc') &! 1 | + | INSTR('ABCDefgh','Be',1) &! 0 |
+ | INSTR('abcdef','abc') &! 1 | ||
</sxh> | </sxh> | ||
- | * ''**ISNUM(**[$строка]**)**'' - функция проверяет, является ли строка ''[$строка]'' числом. Функция возвращает ''0'' (ложь) или ''1'' (истина). <sxh qsp> | + | * ''%%ISNUM([$строка])%%'' - функция проверяет, является ли строка ''%%[$строка]%%'' числом. Функция возвращает ''%%0%%'' (ложь) или ''%%1%%'' (истина). <sxh qsp> |
- | ISNUM(' 9999 ') &! 1 | + | ISNUM(' 9999 ') &! 1 |
- | ISNUM(' -888') &! 1 | + | ISNUM(' -888') &! 1 |
- | ISNUM('777a6') &! 0 | + | ISNUM('777a6') &! 0 |
- | ISNUM('') &! 0, т.к. пустая строка не содержит числа | + | ISNUM('') |
+ | &! 0, т.к. пустая строка не содержит числа | ||
</sxh> | </sxh> | ||
- | * ''**VAL(**[$стр]**)**'' - переводит строку цифр ''[$стр]'' в соответствующее число. При ошибке возвращает ''0''.<sxh qsp> | + | * ''%%VAL([$стр])%%'' - переводит строку цифр ''%%[$стр]%%'' в соответствующее число. При ошибке возвращает ''%%0%%''. <sxh qsp> |
- | яблоки = VAL($яблоки) | + | яблоки = VAL($яблоки) |
- | val('123') & ! увидим 123 | + | val('123') & ! увидим 123 |
- | val('') & ! увидим 0 | + | val('') & ! увидим 0 |
- | val('sand') & ! увидим 0 | + | val('sand') & ! увидим 0 |
</sxh> | </sxh> | ||
- | * ''**$STR(**[#число]**)**'' - переводит число (числовое выражение) в соответствующую строку. <sxh qsp> | + | * ''%%$STR([#число])%%'' - переводит число (числовое выражение) в соответствующую строку. <sxh qsp> |
- | PL $STR(56) | + | PL $STR(56) |
</sxh> | </sxh> | ||
- | [[help:regexp|Вперёд: Регулярные выражения]] | + | ===== Операторы ===== |
+ | * ''%%SCANSTR [$имя_массива], [$текст_для_разбора], [$регэксп], [#номер_группы]%%'' — оператор ищет в строке ''%%[$текст_для_разбора]%%'' непересекающиеся фрагменты, соответствующие регулярному выражению ''%%[$регэксп]%%'', и помещает их в массив ''%%[$имя_массива]%%''. Если параметр ''%%[#номер_группы]%%'' указан и отличается от нуля, в массив помещается не весь фрагмент целиком, а лишь та его часть, которая соответствует группе с указанным номером. | ||
+ | * Подробное описание оператора и примеры использования в разделе "[[help:arrays|массивы]]". | ||
+ | |||
+ | [[help:regexp|Вперёд: Регулярные выражения]] | ||