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 — четвёртый символ в строке — отмечает позицию символа, до которой копируется подстрока. Таким образом, ‘abc’ копируется из строки "abcdefg".

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

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

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

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

(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)]

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

Противопоставьте эту функцию 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 на результате.

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

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

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

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

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

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

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

Примеры:

(split-string "  two words ")
     ⇒ ("two" "words")

Результат не ("" "two" "words" ""), что редко бывает полезным. Если вам нужен такой результат, используйте явное значение для separators:

(split-string "  two words "
              split-string-default-separators)
     ⇒ ("" "two" "words" "")
(split-string "Soup is good food" "o")
     ⇒ ("S" "up is g" "" "d f" "" "d")
(split-string "Soup is good food" "o" t)
     ⇒ ("S" "up is g" "d f" "d")
(split-string "Soup is good food" "o+")
     ⇒ ("S" "up is g" "d f" "d")

Пустые совпадения учитываются, за исключением того, что split-string не будет искать конечное пустое совпадение, когда оно уже достигло конца строки с помощью ненулевого совпадения или когда string пустая:

(split-string "aooob" "o*")
     ⇒ ("" "a" "" "b" "")
(split-string "ooaboo" "o*")
     ⇒ ("" "" "a" "b" "")
(split-string "" "")
     ⇒ ("")

Однако, когда separators может сопоставляться с пустой строкой, omit-nulls обычно равно t, поэтому тонкости в трех предыдущих примерах редко актуальны:

(split-string "Soup is good food" "o*" t)
     ⇒ ("S" "u" "p" " " "i" "s" " " "g" "d" " " "f" "d")
(split-string "Nice doggy!" "" t)
     ⇒ ("N" "i" "c" "e" " " "d" "o" "g" "g" "y" "!")
(split-string "" "" t)
     ⇒ nil

Несколько странное, но предсказуемое поведение может возникнуть для некоторых «нежадных» значений separators, которые могут отдавать предпочтение пустым совпадениям перед ненулевыми совпадениями. Опять же, такие значения редко встречаются на практике:

(split-string "ooo" "o*" t)
     ⇒ nil
(split-string "ooo" "\\|o+" t)
     ⇒ ("o" "o" "o")
Переменная: split-string-default-separators

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

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

Очистка пробелов в string путём сжатия пробелов до одного пробела, а также удаления всех пробелов с начала и конца string.

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

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

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

Удаление заключительного текста, соответствующего regexp, из string. regexp по умолчанию — ‘[ \t\n\r]+’.

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

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

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

Попытка переноса по словам string, чтобы никакие строки не были длиннее length. Заполнение выполняется только по границам пробелов. Если есть отдельные слова, которые длиннее length, эти слова не будут укорочены.

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

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

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

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

END_OF_DOCUMENT_MARKER
Функция: string-lines string &optional omit-nulls

Разделить string на список строк по границам новой строки. Если omit-nulls, удалить пустые строки из результатов.

Функция: 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-2022 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