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

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


help:strings

Различия

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

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

Both sides previous revision Предыдущая версия
Следущая версия
Предыдущая версия
help:strings [2023/01/01 16:38]
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 &​quot;​Верстак&​quot;​ " 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|Вперёд:​ Регулярные выражения]]
  
help/strings.1672591114.txt.gz · Последние изменения: 2023/01/01 16:38 — aleks_versus