Spec-Zone.ru › Elisp

Создание строк

Следующие функции создают строки: либо с нуля, либо объединяя строки, либо разбивая их на части. (О функциях, создающих строки на основе изменённого содержимого других строк, таких как string-replace и replace-regexp-in-string, см. раздел Поиск и замена.)

Функция: make-string count character &optional multibyte

Эта функция возвращает строку, состоящую из count повторений символа character. Если count отрицательно, возникает ошибка.

(make-string 5 ?x)
     ⇒ "xxxxx"
(make-string 0 ?x)
     ⇒ ""

Обычно, если character — символ ASCII, результатом будет однобайтовая строка. Однако если необязательный аргумент multibyte не равен nil, функция создаст многобайтовую строку. Это полезно, если позднее вам потребуется объединить результат с не-ASCII-строками или заменить некоторые его символы не-ASCII-символами.

Среди других функций, похожих на эту, — make-vector (см. раздел Векторы) и make-list (см. раздел Создание конс-ячеек и списков).

Функция: string &rest characters

Эта функция возвращает строку, содержащую символы characters.

(string ?a ?b ?c)
     ⇒ "abc"
Функция: substring string &optional start end

Эта функция возвращает новую строку, состоящую из символов string в диапазоне от символа с индексом start (включительно) до символа с индексом end (не включительно). Индекс первого символа равен нулю. Если передан один аргумент, функция просто копирует string.

(substring "abcdefg" 0 3)
     ⇒ "abc"

В приведённом выше примере индекс ‘a’ равен 0, индекс ‘b’ равен 1, а индекс ‘c’ равен 2. Индекс 3 — четвёртый символ строки — обозначает позицию символа, до которой копируется подстрока. Таким образом, из строки "abcdefg" копируется ‘abc’.

Отрицательное число отсчитывается от конца строки: −1 обозначает индекс последнего символа строки. Например:

(substring "abcdefg" -3 -1)
     ⇒ "ef"

В этом примере индекс ‘e’ равен −3, индекс ‘f’ равен −2, а индекс ‘g’ равен −1. Поэтому символы ‘e’ и ‘f’ включаются, а символ ‘g’ не включается.

Если для end используется nil, он обозначает длину строки. Таким образом,

(substring "abcdefg" -3 nil)
     ⇒ "efg"

Пропуск аргумента end равносилен указанию nil. Следовательно, (substring string 0) возвращает копию всей строки string.

(substring "abcdefg" 0)
     ⇒ "abcdefg"

Однако для этой цели мы рекомендуем использовать copy-sequence (см. раздел Последовательности).

Если у скопированных из string символов есть текстовые свойства, они также копируются в новую строку. См. раздел Текстовые свойства.

substring также принимает вектор в качестве первого аргумента. Например:

(substring [a b (c) "d"] 1 3)
     ⇒ [b (c)]

Если start не является целым числом или end не является ни целым числом, ни nil, возникает ошибка wrong-type-argument. Если start указывает на символ после end или одно из целых чисел выходит за допустимый диапазон для string, возникает ошибка args-out-of-range.

Сравните эту функцию с buffer-substring (см. раздел Просмотр содержимого буфера), которая возвращает строку, содержащую часть текста в текущем буфере. Индекс начала строки равен 0, тогда как индекс начала буфера равен 1.

Функция: substring-no-properties string &optional start end

Эта функция работает как substring, но удаляет из результата все текстовые свойства. Кроме того, start можно опустить или указать как nil, что равносильно 0. Таким образом, (substring-no-properties string) возвращает копию string без текстовых свойств.

Функция: concat &rest sequences

Эта функция возвращает строку, состоящую из символов переданных ей аргументов (а также их текстовых свойств, если они есть). Аргументами могут быть строки, списки чисел или векторы чисел; сами аргументы не изменяются. Если concat вызвана без аргументов, она возвращает пустую строку.

(concat "abc" "-def")
     ⇒ "abc-def"
(concat "abc" (list 120 121) [122])
     ⇒ "abcxyz"
;; nil is an empty sequence.
(concat "abc" nil "-def")
     ⇒ "abc-def"
(concat "The " "quick brown " "fox.")
     ⇒ "The quick brown fox."
(concat)
     ⇒ ""

Эта функция не всегда выделяет новую строку. Вызывающим сторонам не следует полагаться на то, что результат будет новой строкой или что он не будет eq с существующей строкой.

В частности, изменение возвращённого значения может непреднамеренно изменить другую строку, изменить константную строку в программе или даже вызвать ошибку. Чтобы получить строку, которую можно безопасно изменять, примените copy-sequence к результату.

Если нужно создать строку из n копий заданной исходной строки source, можно воспользоваться concat следующим образом:

  (apply #'concat (make-list n source))

Это основано на том, что concat может принимать в качестве аргументов последовательности любого типа.

Сведения о других функциях объединения см. в описании mapconcat в разделе Функции отображения, vconcat в разделе Функции для векторов и append в разделе Создание конс-ячеек и списков. Чтобы объединить отдельные аргументы командной строки в строку для использования в качестве команды оболочки, см. combine-and-quote-strings.

Функция: split-string string &optional separators omit-empty trim

Эта функция разбивает string на подстроки на основе регулярного выражения separators (см. раздел Регулярные выражения). Каждое совпадение с separators задаёт точку разделения; подстроки между точками разделения формируют список, который и возвращается.

Если separators равно nil (или аргумент опущен), по умолчанию используется значение split-string-default-separators, и функция ведёт себя так, как если бы omit-empty равнялся t.

Если omit-empty равен nil (или аргумент опущен), результат содержит пустые строки, если имеются два последовательных совпадения с separators или совпадение находится рядом с началом либо концом string. Если omit-empty равен t, эти пустые строки опускаются в результате.

Если необязательный аргумент trim не равен nil, он должен быть регулярным выражением, задающим текст, который следует удалить в начале и конце каждой подстроки. После удаления подстрока может стать пустой и быть опущена из результата, если omit-empty равен t, как описано выше.

Если нужно разбить строку на список отдельных аргументов командной строки, подходящий для call-process или start-process, см. split-string-and-unquote.

Не используйте для separators значение, соответствующее пустой строке, иначе результат будет непредсказуемым. Чтобы разбить строку на отдельные символы, используйте string-to-list или string-to-vector.

Примеры:

(split-string "  one  two   ")            ⇒ ("one" "two")
(split-string "one::two:" ":")            ⇒ ("one" "" "two" "")
(split-string "one::two:" ":+")           ⇒ ("one" "two" "")
(split-string "one::two:" ":" t)          ⇒ ("one" "two")
(split-string "one: : two : " ":" t " +") ⇒ ("one" "two")
Переменная: split-string-default-separators

Значение separators по умолчанию для split-string. Обычно оно равно "[ \f\t\n\r\v]+".

Функция: string-clean-whitespace string

Нормализует пробельные символы в string, заменяя последовательности пробельных символов одним пробелом, а также удаляя все пробельные символы в начале и конце string.

Функция: string-trim-left string &optional regexp

Удаляет из начала string текст, соответствующий regexp. По умолчанию regexp равен ‘[ \t\n\r]+’.

Функция: string-trim-right string &optional regexp

Удаляет из конца string текст, соответствующий regexp. По умолчанию regexp равен ‘[ \t\n\r]+’.

Функция: string-trim string &optional trim-left trim-right

Удаляет из начала string текст, соответствующий trim-left, а из конца — текст, соответствующий trim-right. По умолчанию оба регулярных выражения равны ‘[ \t\n\r]+’.

Функция: string-fill string width

Пытается переносить слова в string так, чтобы ширина отображаемых строк не превышала width. Переносы выполняются только по границам пробельных символов. Если отдельные слова длиннее width, они не сокращаются, поэтому в этом случае string может отображаться строками шире width.

Функция: string-limit string length &optional end coding-system

Если строка string короче length символов, она возвращается без изменений. В противном случае возвращается подстрока string, состоящая из первых length символов. Если задан необязательный параметр end, вместо этого возвращается строка из последних length символов.

Если coding-system не равен nil, перед ограничением длины строка string кодируется, а результатом будет однобайтовая строка длиной менее length байт. Если string содержит символы, кодируемые несколькими байтами (например, при использовании utf-8), результирующая однобайтовая строка никогда не обрезается посреди представления символа.

Эта функция измеряет длину строки в символах или байтах, поэтому обычно не подходит, если нужно укоротить строку для отображения; вместо неё используйте truncate-string-to-width, window-text-pixel-size или string-glyph-split (см. раздел Размер отображаемого текста).

Функция: string-lines string &optional omit-empty keep-newlines

Разбивает string на список строк по символам новой строки. Если необязательный аргумент omit-empty не равен nil, пустые строки удаляются из результата. Если необязательный аргумент keep-newlines не равен nil, завершающие символы новой строки не удаляются из результирующих строк.

Функция: string-pad string length &optional padding start

Дополняет string до заданной длины length, используя символ padding. По умолчанию padding — пробел. Если string длиннее length, дополнение не выполняется. Если start равен nil или аргумент опущен, символы дополнения добавляются в конец string; если он не равен nil, символы дополнения добавляются в начало string.

Функция: string-chop-newline string

Удаляет из string завершающий символ новой строки, если он есть.

Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Creating-Strings.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API