次のようにAppleScriptで文字列を操作するという課題があります。
- 基本文字列は、電子メール受信者の表示名です。たとえば、次のようになります。
First Last (first.last@hotmail.com)
- 表示名を「トリミング」して、括弧内の実際のメール アドレスを削除したい
- 望ましい結果は次のようになるはずです。
First Last
そのため、最初のブラケットの前のスペースを削除する必要があります。
AppleScript でこれを行う最善かつ最も効率的な方法は何ですか?
次のようにAppleScriptで文字列を操作するという課題があります。
First Last (first.last@hotmail.com)
First Last
そのため、最初のブラケットの前のスペースを削除する必要があります。AppleScript でこれを行う最善かつ最も効率的な方法は何ですか?
オフセットも使用します。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}
私の知る限り、text item delimiters を元に戻す必要はありません。
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 script を使用して、テキストの大文字と小文字を変更できます。
do shell script "printf %s " & quoted form of "aä" & " | LC_CTYPE=UTF-8 tr [:lower:] [:upper:]" without altering line endings
echo は、デフォルトで 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
は10.5以降text
と同等です:string
Unicode テキストと非 Unicode テキストの区別はなくなりました。「text」という名前のテキスト クラスは 1 つだけあります。つまり、「foo」のクラスはテキストを返します。
次のようなより単純なソリューションを使用することをお勧めします。
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"