Управление строками в AppleScript - PullRequest
2 голосов
/ 15 июля 2009

У меня есть проблема в AppleScript, чтобы манипулировать строкой следующим образом:

  • Базовая строка - это отображаемое имя получателя электронной почты, скажем: First Last (first.last@hotmail.com)
  • Я бы хотел "обрезать" отображаемое имя, чтобы убрать фактический адрес электронной почты в скобках
  • Желаемый результат должен быть First Last - поэтому пространство перед первым скобкой необходимо удалить.

Какой самый лучший и эффективный способ сделать это в AppleScript?

Ответы [ 3 ]

3 голосов
/ 19 апреля 2013

Я бы также использовал смещения. text 1 thru 2 of "xyz" эквивалентно items 1 thru 2 of "xyz" as string.

set x to "First Last (first.last@hotmail.com)"
set pos to offset of " (" in x
{text 1 thru (pos - 1) of x, text (pos + 2) thru -2 of x}

Насколько я знаю, вам не нужно восстанавливать разделители текстовых элементов .

set x to "First Last (first.last@hotmail.com)"
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, чтобы изменить регистр текста:

do shell script "printf %s " & quoted form of "aä" & " | LC_CTYPE=UTF-8 tr [:lower:] [:upper:]" without altering line endings

echo интерпретирует escape-последовательности по умолчанию в OS X / bin / sh. Вы также можете использовать 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. Это преобразует окончания строки в LF:

set text item delimiters to linefeed
(paragraphs of (get the clipboard as text)) as text

Unicode text эквивалентно text и string с 10,5 :

Больше нет различий между Unicode и не-Unicode текстом. Существует ровно один текстовый класс с именем «text», то есть класс «foo» возвращает текст.

3 голосов
/ 15 июля 2009
set theSample to "First Last (first.last@hotmail.com)"

return trimEmailAddress(theSample)
-->Result: "First Last"

on trimEmailAddress(sourceAddress)
    set AppleScript's text item delimiters to {" ("}
    set addressParts to (every text item in sourceAddress) as list
    set AppleScript's text item delimiters to ""
    set nameOnly to item 1 of addressParts

    return nameOnly
end trimEmailAddress
1 голос
/ 19 апреля 2013

Возможно, вы захотите использовать более простое решение, подобное этому:

set theSample to "First Last (first.last@hotmail.com)"

on trimEmailAddress(sourceAddress)
    set cutPosition to (offset of " (" in sourceAddress) - 1
    return text 1 thru cutPosition of sourceAddress
end trimEmailAddress

return trimEmailAddress(theSample)
-->  "First Last"
...