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

Глава 8

Строки и символы

Текст в Axiom хранится в значениях типа STRING, а вся работа с ним идёт через встроенные функции: одна измеряет длину, другие выделяют фрагмент, ищут и заменяют совпадения, меняют регистр, собирают и разбирают списки. Глава объясняет, как устроено строковое значение, в каких единицах измеряется текст и как выбрать функцию под задачу.

Представление текста

Тип STRING и строки фиксированной длины STRING*N описаны на странице строковых типов, а запись литералов, кавычки и интерполяция — в строковых литералах. Эти правила отвечают за то, как текст попадает в программу; функции ниже определяют, что с ним можно сделать дальше.

Единица хранения не совпадает с видимым символом. Эмодзи занимает суррогатную пару из двух кодовых единиц UTF-16, а буква со знаком ударения — несколько кодов. В LEN, LEFT, RIGHT и MID поэтому можно выбрать UTF16, CODEPOINT или GRAPHEME, тогда как позиции INSTR и других обычных позиционных функций всегда остаются позициями UTF-16.

Отдельный случай — числовой код символа. CHR и ASC связывают младшие коды с таблицей CP866, а CHRW и ASCW работают непосредственно с Unicode. Код символа, длина строки и ширина нарисованного текста — три разные величины, и путать их не следует.

Выбор функции по задаче

Функцию удобно выбирать по тому, что нужно получить на выходе. LEN даёт длину текста; LEFT, RIGHT и MID — фрагмент; INSTR — позицию найденного фрагмента, а CONTAINS отвечает только на вопрос, есть ли он в строке. Замена, обрезка и дополнение возвращают новую строку, поэтому результат нужно присвоить переменной или передать дальше: исходное значение вызова не меняют.

Темы главы

Группы строковых функций

Функции главы собраны в пять групп по назначению:

  • LEN, LEFT, RIGHT и MID измеряют текст и выделяют его части; для них можно выбрать кодовые единицы UTF-16, коды Unicode или графемы.
  • TRIM, LTRIM и RTRIM убирают заполнение у краёв строки, LCASE и UCASE меняют регистр, REVERSE разворачивает порядок кодов Unicode.
  • Функции поиска проверяют наличие фрагмента, находят его позицию или считают вхождения; REPLACE и REPLACEMANY заменяют точные фрагменты.
  • Функции построения повторяют текст, добавляют заполнение, вставляют или удаляют фрагменты; SPLIT разбивает текст на массив строк, а JOIN соединяет элементы массива.
  • ASC, ASCW, CHR и CHRW преобразуют символы и числовые коды; их правила описаны в статье «Коды символов».

Поиск по шаблону выполняют регулярные выражения; обычный строковый поиск сравнивает заданный фрагмент буквально.

Позиции, параметры и тип строки

Общие для всей главы соглашения сводятся к трём правилам.

  • Начальная позиция строковых операций равна 1; ноль используется как результат отсутствующего совпадения в INSTR и INSTRREV.
  • Необязательность параметра определяется формой вызова: TRIM допускает явный набор, SPLIT и JOIN — разделитель, функции дополнения — заполнитель.
  • Тип аргумента зависит от его назначения: текст передаётся строкой STRING, позиция или количество — целым числом INTEGER, набор строк — массивом STRING[]. Точный договор каждого аргумента приведён рядом с соответствующей функцией.

Запускаемые примеры

См. также