- Вывод текста
- Программирование
- Оформление
- Расширенные возможности
- Нюансы написания игр под разные плееры
-
- x AeroQSP
- Утилиты и средства разработки
Это старая версия документа.
QSP поддерживает работу с массивами. Массив - последовательный набор значений, имеющих один тип данных и обладающих одним названием. Элементы массива идентифицируются по индексам. Индексация ведётся с нуля. Т.е. элемент с индексом 0 - первый элемент массива, 1 - второй и т.д. В зависимости от типа элементов массива он может быть текстовым или числовым. В QSP каждый массив имеет и текстовые, и числовые значения. Если вы хотите обратиться к текстовым элементам массива, нужно перед его названием поставить символ "$", если к числовым - достаточно указать его название. Обращение к элементу массива происходит так: сначала указывается название массива (с символом "$" или без него), затем в квадратных скобках - числовое выражение, равное индексу элемента, к которому производится обращение. Т.е. "$A[6]" - обращение к текстовому значению элемента с индексом 6 (7-му) массива с названием "A", "NEW[2]" - обращение к числовому значению элемента с индексом 2 (3-му) массива с названием "NEW".
Присваивание и считывание значений элементов массива происходит точно так же, как и при работе с переменной. Примеры:
A[2]=89 - присвоить числовому значению 3-го элемента массива "A" значение 89
$B[3]='Cool' - присвоить текстовому значению 4-го элемента массива "B" значение 'Cool'
A=B[5] - присвоить числовому значению переменной "A" числовое значение 6-го элемента массива "B"
$C=$MAS[54] - аналогично
Массивы могут индексироваться через строки. Регистр символов данной строки не имеет значения. Примеры:
$ARR['mystring'] = 'value' эквивалентно $arr['MyString'] = 'value'
ARR['mystring'] = 890
$item_loc['палка'] = 'лес'
$DESCS[$curloc] = '«$DESCS[$curloc]» text.'
values['67'] = 87
Кроме этого, существует упрощённый синтаксис добавления элемента в массив - если индекс элемента не указан, то будет выбран элемент, следующий за последним. Например:
$objs[] = 'Топор'
$objs[] = 'Напильник'
$objs[] = 'Доска'
При получении значения, если индекс элемента не указан, то будет выбран последний элемент. Например:
$a = $objs[]
a = objs[]
PS:
В QSP все переменные являются массивами (если не указывать индекс - он будет равен 0), поэтому обращение "A=AR[5]" полностью эквивалентно такому: "A[0]=AR[5]". Следствие этого - к названиям массивов применяются точно такие же правила записи, как к названиям переменных.
KILLVAR [$название массива],[#индекс элемента] - удаление элемента массива. Если индекс элемента не указан, то очищается весь массив. Если оператор вызван без аргументов, то удаляются все переменные - обычно применяется в начале игры, чтобы при возврате в начальную локацию после неудачного прохождения какого-то этапа игры обнулить все переменные (в противном случае, может оказаться, что запертые двери уже открыты, жена похищена до свадьбы, а Баба-Яга уже отдала кому-то нужный клубочек). Примеры:
KILLVAR
KILLVAR 'a'
KILLVAR 'a',3
COPYARR [$массив-приёмник],[$массив-источник] - копирование содержимого массива в другой массив. Копируются как текстовые, так и числовые значения массива. Размер массива-приёмника при копировании не имеет значения. Примеры:
COPYARR '$a','$b'
COPYARR 'a','b'
COPYARR $arrname1,$arrname2
COPYARR 'a«$arrname1»','a«$arrname2»'
ARRSIZE([$выражение]) - возвращает число элементов в массиве с названием [$выражение].
ARRPOS([#выражение 1],[$выражение 2],[выражение 3]) - возвращает индекс элемента массива с названием [$выражение 2], равного значению выражения [выражение 3]. Поиск начинается с элемента номер [#выражение 1]; индексация элементов массива ведётся с нуля. Параметр [#выражение 1] может отсутствовать, при этом он принимается равным 0. Если указанное значение не найдено, функция возвращает -1.
Чтобы найти числовое значение в массиве, нужно в [$выражение 2] подставить лишь название массива (в кавычках), для строкового - название массива с символом "$" перед его названием. Примеры:
ARRPOS(0,'$A','This') - найдёт строку 'This' в текстовых значениях массива "A" (или вернёт -1, если такого значения не существует)
ARRPOS(2,'A',65) - найдёт число 65 в числовых значениях массива "A" (при этом первые два элемента массива игнорируются)
ARRPOS('$B','test') - поиск строки 'test' среди текстовых значений массива "B"
См. также функции "MAX, MIN" (раздел "Базовые функции языка QSP"), функцию "ARRCOMP" (раздел "Функции, работающие с регулярными выражениями") и операторы для работы с переменными / массивами (здесь).
Функции, использующие регулярные выражения
Top Previous Next
ARRCOMP([#выражение 1],[$выражение 2],[$выражение 3]) - возвращает индекс элемента массива с названием [$выражение 2], соответствующего регулярному выражению [$выражение 3]. Поиск начинается с элемента номер [#выражение 1]; индексация элементов массива ведётся с нуля. Параметр [#выражение 1] может отсутствовать, при этом он принимается равным 0. Если элемент не найден, функция возвращает -1.
Поиск происходит среди текстовых элементов массива. Примеры:
ARRCOMP(0,'A','This') - найдёт строку 'This' среди текстовых элементов массива "A" (или вернёт -1, если такого значения не существует)
ARRCOMP(2,'A','abc\d+') - найдёт строку, соответствующую регулярному выражению "abc\d+", в текстовых значениях массива "A" (первые два элемента массива игнорируются)
ARRCOMP(0,'A','.*string.*') - аналогично предыдущему примеру, но поиск осуществляется по всем текстовым элементам массива
ARRCOMP('A','This') - эквивалентно 1му варианту
Вперёд: