AppleScriptで文字列を処理する(2)

文字数を数えるnumber, length

 文字列を処理するには「何番目の文字を入れ替えて・・・」という風に、特定の文字列が何文字目かを知ることができると便利です。
 単純に文字数を知るにはlengthが便利です。

set cn to the length of "I love you"
display dialog "cn:" & cn

 cnは10となります。

 文字列だけでなく、単語数、段落数を知るには、numberを使うと便利です。

set cn to the number of characters of "I love you"
set wn to the number of words of "I love you"
display dialog "cn:" & cn & ", wn:" & wn

 cnは10、wnは3となります。

thruを使って文字列を取り出すときは as textを

 文字範囲を指定するには、thruを使います。
 このとき、注意すべきは、文字列をデータとして扱うかテキストとして扱うかで結果が分かれることです。
 applescriptでは、文字列データに対して set a to characters 1 thru 5 of data と書くと、characterのリストを作ることになります。
いっぽう、文字列テキストに対して set a to characters 1 thru 5 of data_text と書くと、それは、一文字目から5文字目までのテキストを作ることになります。下の例を見て下さい。

set lc to characters 1 thru 5 of "I love you"
(このとき、lcは {"I", " ", "l", "o", "v", "e"}になる)
set tc to characters 1 thru 5 of "I love you" as text
(このとき、tcは "I love"になる)

 ですから、テキストを取り出したいときは "as text"を入れるのを忘れずに。

区切り文字も丸ごと取り出すなら「text from words m to n」

 thruは便利な指定方法ですが、ひとつ難点があります。それは、複数のwordを取り出すときに、単語だけを抜き出して区切り文字を省略してしまうことです。たとえば次の例。

set wtext to words 1 thru 3 of "I love you very much" as text
display dialog wtext

 あらら、「Iloveyou」になっちゃいました。
 こんなときは、以下のようにtext from, to を使います。この方法だと、区切り文字も丸ごと取り出すことができます。

set wtext to text from word 1 to word 3 of "I love you very much"
display dialog wtext

結果は「I love you」となります。

(2008.08.06)

参考:
AppleScriptLanguageGuide.pdf
Working with Text

to Index