Я бы также использовать коррекции. text 1 thru 2 of "xyz"
эквивалентно items 1 thru 2 of "xyz" as string
.
set x to "First Last ([email protected])"
set pos to offset of " (" in x
{text 1 thru (pos - 1) of x, text (pos + 2) thru -2 of x}
Насколько я знаю, you don't have to restore text item delimiters.
set x to "First Last ([email protected])"
set text item delimiters to {" (", ")"}
set {fullname, email} to text items 1 thru 2 of x
Если другие обыскивали о манипуляции строки в общем, вот способы замены и разделения текста и объединения списков:
on replace(input, x, y)
set text item delimiters to x
set ti to text items of input
set text item delimiters to y
ti as text
end replace
on split(input, x)
if input does not contain x then return {input}
set text item delimiters to x
text items of input
end split
on join(input, x)
set text item delimiters to x
input as text
end join
сравнения строк игнорируют случай по умолчанию:
"A" is "a" -- true
"ab" starts with "A" -- true
considering case
"A" is "a" -- false
"ab" starts with "A" -- false
end considering
Обратный текст:
reverse of items of "esrever" as text
Вы можете использовать сделать скрипт для изменения регистра текста:
do shell script "printf %s " & quoted form of "aä" & " | LC_CTYPE=UTF-8 tr [:lower:] [:upper:]" without altering line endings
эхо интерпретирует управляющие последовательности по умолчанию в OS X в/бен/ш. Вы также можете использовать shopt -u xpg_echo; echo -n
вместо printf %s
. LC_CTYPE=UTF-8
содержит классы символов, включающие некоторые символы, отличные от ASCII. Если without altering line endings
не учитывается, переводы строк заменяются возвратом каретки и удаляется новая строка в конце вывода.
paragraphs of
разделяет строки вокруг \ n, \ r и \ r \ n. Он не разделяет разделители.
paragraphs of ("a" & linefeed & "b" & return & "c" & linefeed)
-- {"a", "b", "c", ""}
В текстовой версии буфера обмена используются линии линии CR. Это преобразует концы строк в ЛФ:
set text item delimiters to linefeed
(paragraphs of (get the clipboard as text)) as text
Unicode text
был эквивалентен text
и string
так 10.5:
Существует больше нет различия между Unicode и текстом, не Unicode. Существует ровно один текстовый класс с именем «текст»: то есть класс «foo» возвращает текст.
Отличное решение. Удаление части, основанной только на имени, может быть упрощено для 'set nameOnly для первого текстового элемента sourceAddress', устраняя необходимость в вспомогательных операторах, связанных с' addressParts'. – mklement0