Axiom Справочник языка

Глава 8

Построение строк и массивы строк

Строку нередко нужно собрать из частей, выровнять по ширине поля или разобрать на отдельные значения. Первую группу задач решают REPEAT, SPACE, STRING, PADLEFT, PADRIGHT, CENTER, INSERT и REMOVE, вторую — SPLIT и JOIN. Все они возвращают новое значение: либо строку, либо массив строк, — а исходные данные оставляют без изменения.

Предельная длина результата

Строковые результаты REPEAT, SPACE, STRING, PADLEFT, PADRIGHT, CENTER, INSERT и JOIN ограничены 16 777 216 кодовыми единицами UTF-16. Превышение вызывает перехватываемую ошибку MB3007. Для REPEAT проверяется произведение длины фрагмента и количества повторений, для заполнения — требуемая ширина, для соединения — общая длина. Проверка размера предшествует созданию результирующей строки, поэтому исходные строки при отказе не изменяются. Общие правила приведены в описании STRING.

REPEAT

Функция REPEAT возвращает строку, повторив исходный фрагмент указанное число раз. Так строят узор, отступ или повторяющийся текст. Вызов выполняется в выражении и не требует открытия экрана, холста или файла; исходные значения аргументов при этом не изменяются.

Синтаксис

Форма вызова:

REPEAT(<текст>, <количество>)

Аргументы

АргументЧто передать
<текст>Передайте исходную строку типа STRING, которую функция должна обработать.
<количество>Передайте неотрицательное целое число типа INTEGER с количеством повторений.

Возвращаемое значение

Функция возвращает строку типа STRING.

Правила и пограничные случаи

При нуле повторений или пустом фрагменте результат пуст. Повторяется весь фрагмент, а не только его первый символ.

Диагностика

Ошибка MB3007 возникает при отрицательном количестве повторений.

Пример

PRINT REPEAT("ab", 3)
PRINT "["+REPEAT("ab", 0)+"]"

Программа выводит:

ababab
[]

SPACE

Функция SPACE возвращает строку из указанного количества пробелов. Такими пробелами добавляют отступ или разделяют части вывода. Вызов выполняется в выражении и не требует открытия экрана, холста или файла; исходные значения аргументов при этом не изменяются.

Синтаксис

Форма вызова:

SPACE(<количество>)

Аргументы

АргументЧто передать
<количество>Передайте неотрицательное целое число типа INTEGER с количеством обычных пробелов U+0020.

Возвращаемое значение

Функция возвращает строку типа STRING.

Правила и пограничные случаи

При количестве 0 результат пуст. Один обычный пробел занимает одну кодовую единицу UTF-16.

Диагностика

Ошибка MB3007 возникает при отрицательном количестве.

Пример

PRINT "["+SPACE(3)+"]"
PRINT LEN(SPACE(0))

Программа выводит:

[   ]
0

STRING

Функция STRING возвращает строку, повторив первую кодовую единицу заполнителя указанное число раз. Она удобна для линии из одного символа, например трёх дефисов. Вызов выполняется в выражении и не требует открытия экрана, холста или файла; исходные значения аргументов при этом не изменяются.

Синтаксис

Форма вызова:

STRING(<количество>, <заполнение>)

Аргументы

АргументЧто передать
<количество>Передайте неотрицательное целое число типа INTEGER с количеством повторений.
<заполнение>Передайте строку типа STRING с заполнителем. При положительном количестве она должна быть непустой. Используется только её первая кодовая единица UTF-16.

Возвращаемое значение

Функция возвращает строку типа STRING длиной в указанное количество кодовых единиц UTF-16.

Правила и пограничные случаи

При количестве 0 результат пуст и заполнитель не проверяется на пустоту. Многосимвольный заполнитель не повторяется целиком. Эмодзи вне основной плоскости Unicode начинается с половины суррогатной пары, поэтому для его повторения используйте REPEAT.

Диагностика

Ошибка MB3007 возникает при отрицательном количестве или пустом заполнителе при положительном количестве.

Пример

PRINT STRING(3, "-=")
PRINT "["+STRING(0, "")+"]"

Программа выводит:

---
[]

PADLEFT

Функция PADLEFT возвращает строку, дополнив её слева до заданной ширины. Так выравнивают текст в поле заданной длины. Вызов выполняется в выражении и не требует открытия экрана, холста или файла; исходные значения аргументов при этом не изменяются.

Синтаксис

Форма 1:

PADLEFT(<текст>, <ширина>)

Форма 2:

PADLEFT(<текст>, <ширина>, <заполнение>)

Аргументы

АргументЧто передать
<текст>Передайте исходную строку типа STRING, которую функция должна обработать.
<ширина>Передайте неотрицательное целое число типа INTEGER с минимальной длиной результата в кодовых единицах UTF-16.
<заполнение>Передайте непустую строку типа STRING с заполнителем. Используется первая кодовая единица UTF-16; без аргумента используется обычный пробел.

Возвращаемое значение

Функция возвращает строку типа STRING.

Правила и пограничные случаи

Если исходный текст уже не короче заданной ширины, он возвращается без обрезки. Пустой текст заполняется до заданной ширины. Заполнитель проверяется даже тогда, когда дополнение не требуется. Эмодзи из двух кодовых единиц не подходит в качестве одного заполнителя.

Диагностика

Ошибка MB3007 возникает при отрицательной ширине или пустом явно переданном заполнителе.

Пример

PRINT "["+PADLEFT("A", 4)+"]"
PRINT PADLEFT("A", 4, "-")

Программа выводит:

[   A]
---A

PADRIGHT

Функция PADRIGHT возвращает строку, дополнив её справа до заданной ширины. Так выравнивают текст в поле заданной длины. Вызов выполняется в выражении и не требует открытия экрана, холста или файла; исходные значения аргументов при этом не изменяются.

Синтаксис

Форма 1:

PADRIGHT(<текст>, <ширина>)

Форма 2:

PADRIGHT(<текст>, <ширина>, <заполнение>)

Аргументы

АргументЧто передать
<текст>Передайте исходную строку типа STRING, которую функция должна обработать.
<ширина>Передайте неотрицательное целое число типа INTEGER с минимальной длиной результата в кодовых единицах UTF-16.
<заполнение>Передайте непустую строку типа STRING с заполнителем. Используется первая кодовая единица UTF-16; без аргумента используется обычный пробел.

Возвращаемое значение

Функция возвращает строку типа STRING.

Правила и пограничные случаи

Если исходный текст уже не короче заданной ширины, он возвращается без обрезки. Пустой текст заполняется до заданной ширины. Заполнитель проверяется даже тогда, когда дополнение не требуется. Эмодзи из двух кодовых единиц не подходит в качестве одного заполнителя.

Диагностика

Ошибка MB3007 возникает при отрицательной ширине или пустом явно переданном заполнителе.

Пример

PRINT "["+PADRIGHT("A", 4)+"]"
PRINT PADRIGHT("A", 4, "-")

Программа выводит:

[A   ]
A---

CENTER

Функция CENTER возвращает строку, дополнив её с обеих сторон до заданной ширины. Так выравнивают текст в поле заданной длины. Вызов выполняется в выражении и не требует открытия экрана, холста или файла; исходные значения аргументов при этом не изменяются.

Синтаксис

Форма 1:

CENTER(<текст>, <ширина>)

Форма 2:

CENTER(<текст>, <ширина>, <заполнение>)

Аргументы

АргументЧто передать
<текст>Передайте исходную строку типа STRING, которую функция должна обработать.
<ширина>Передайте неотрицательное целое число типа INTEGER с минимальной длиной результата в кодовых единицах UTF-16.
<заполнение>Передайте непустую строку типа STRING с заполнителем. Используется первая кодовая единица UTF-16; без аргумента используется обычный пробел.

Возвращаемое значение

Функция возвращает строку типа STRING.

Правила и пограничные случаи

Если исходный текст уже не короче заданной ширины, он возвращается без обрезки. Пустой текст заполняется до заданной ширины. Если количество добавляемых единиц нечётно, справа добавляется на одну больше, чем слева. Заполнитель проверяется даже тогда, когда дополнение не требуется. Эмодзи из двух кодовых единиц не подходит в качестве одного заполнителя.

Диагностика

Ошибка MB3007 возникает при отрицательной ширине или пустом явно переданном заполнителе.

Пример

PRINT "["+CENTER("A", 4)+"]"
PRINT CENTER("A", 4, "-")

Программа выводит:

[ A  ]
-A--

INSERT

Функция INSERT возвращает строку, вставив фрагмент перед указанной позицией. Так добавляют текст в начало, середину или конец строки. Вызов выполняется в выражении и не требует открытия экрана, холста или файла; исходные значения аргументов при этом не изменяются.

Синтаксис

Форма вызова:

INSERT(<текст>, <начальная позиция>, <фрагмент>)

Аргументы

АргументЧто передать
<текст>Передайте исходную строку типа STRING, которую функция должна обработать.
<начальная позиция>Передайте целое число типа INTEGER с начальной позицией. Позиции отсчитываются от 1.
<фрагмент>Передайте строку типа STRING, которую требуется вставить.

Возвращаемое значение

Функция возвращает строку типа STRING.

Правила и пограничные случаи

Позиции считаются в кодовых единицах UTF-16. Начало больше длины текста добавляет фрагмент в конец. Пустой фрагмент оставляет текст без изменения; вставка в пустой текст возвращает фрагмент.

Диагностика

Ошибка MB3007 возникает при начале меньше 1.

Пример

PRINT INSERT("abcd", 3, "X")
PRINT INSERT("abc", 99, "!")
PRINT INSERT("", 1, "X")

Программа выводит:

abXcd
abc!
X

REMOVE

Функция REMOVE возвращает строку, удалив заданное количество единиц текста с указанной позиции. Она удаляет часть строки по её расположению. Вызов выполняется в выражении и не требует открытия экрана, холста или файла; исходные значения аргументов при этом не изменяются.

Синтаксис

Форма вызова:

REMOVE(<текст>, <начальная позиция>, <количество>)

Аргументы

АргументЧто передать
<текст>Передайте исходную строку типа STRING, которую функция должна обработать.
<начальная позиция>Передайте целое число типа INTEGER с начальной позицией. Позиции отсчитываются от 1.
<количество>Передайте неотрицательное целое число типа INTEGER с количеством удаляемых кодовых единиц UTF-16.

Возвращаемое значение

Функция возвращает строку типа STRING.

Правила и пограничные случаи

Если начало больше длины строки или количество равно 0, текст не изменяется. Если запрошено больше единиц, чем осталось до конца, удаляется весь остаток. Пустой текст остаётся пустым. Граница может разделить суррогатную пару.

Диагностика

Ошибка MB3007 возникает при начале меньше 1 или отрицательном количестве.

Пример

PRINT REMOVE("abcd", 2, 2)
PRINT REMOVE("abcd", 3, 99)
PRINT REMOVE("abc", 99, 1)

Программа выводит:

ad
ab
abc

SPLIT

Функция SPLIT разбивает строку по разделителю и возвращает массив полученных частей. Она позволяет обработать список значений как отдельные строки. Вызов выполняется в выражении и не требует открытия экрана, холста или файла; исходные значения аргументов при этом не изменяются.

Синтаксис

Форма 1:

SPLIT(<текст>)

Форма 2:

SPLIT(<текст>, <разделитель>)

Аргументы

АргументЧто передать
<текст>Передайте исходную строку типа STRING, которую функция должна обработать.
<разделитель>Передайте непустую строку типа STRING с точным разделителем. Без этого аргумента используется запятая.

Возвращаемое значение

Функция возвращает новый выделенный одномерный массив строк STRING[]. Первый индекс равен 1; пустой результат имеет границы 1 TO 0.

Правила и пограничные случаи

Сравнение разделителя учитывает регистр. Пустой текст даёт пустой массив. Разделитель в начале, в конце или рядом с другим разделителем создаёт пустой элемент. Если разделитель не найден в непустом тексте, массив содержит одну строку — весь текст.

Диагностика

Ошибка MB3007 возникает при пустом разделителе, даже если исходный текст пуст.

Пример

DIM parts[] AS STRING
parts[]=SPLIT("one,two")
PRINT parts[1]
PRINT parts[2]
parts[]=SPLIT("a::b", "::")
PRINT JOIN(parts[], "|")
parts[]=SPLIT("")
PRINT ARRAYLENGTH(parts[])

Программа выводит:

one
two
a|b
0

JOIN

Функция JOIN соединяет элементы массива строк и возвращает одну строку. Она собирает список строк обратно в текст, вставляя разделитель между соседними элементами. Вызов выполняется в выражении и не требует открытия экрана, холста или файла; исходные значения аргументов при этом не изменяются.

Синтаксис

Форма 1:

JOIN(<элементы>)

Форма 2:

JOIN(<элементы>, <разделитель>)

Аргументы

АргументЧто передать
<элементы>Передайте одномерный массив строк STRING[], элементы которого нужно соединить.
<разделитель>Передайте строку типа STRING, вставляемую между соседними элементами. Она может быть пустой; без аргумента используется запятая.

Возвращаемое значение

Функция возвращает строку типа STRING.

Правила и пограничные случаи

Элементы обходятся от нижней до верхней границы массива. Пустой или невыделенный массив даёт пустую строку; единственный элемент возвращается без разделителей. Нижняя граница не обязана равняться 1.

Диагностика

Неверный тип аргумента, в том числе массив другого типа или ранга, отклоняется при проверке программы. Невыделенный одномерный массив строк допустим.

Пример

DIM items[5 TO 6] AS STRING
items[5]="one"
items[6]="two"
PRINT JOIN(items[])
PRINT JOIN(items[], "|")
DIM empty[] AS STRING
PRINT "["+JOIN(empty[])+"]"

Программа выводит:

one,two
one|two
[]

Коды символов

Функции ASC, ASCW, CHR и CHRW преобразуют символы и их числовые коды. Их полный договор и примеры находятся в статье «Коды символов».

См. также