これを 5 行に簡略化できます。
tell application "Address Book"
add (every person whose birth date is missing value) to ¬
make new group with properties {name:"No Birthday"}
save addressbook
end tell
add
単一のオブジェクトだけでなくリストも取得できることが判明したため、ループをスキップできます。(ループを使用していた場合は、フォームを使用できたはずrepeat with thePerson in people ... end repeat
です。これは、以前のものよりもきれいです。) 次に、アドレスブックは、欠落している誕生日をmissing value
(事実上null
) として保存しているように見えるので、比較するのではなく、それを確認する必要があります。早い時期に反対します。したがって、誕生日のない人々のリストを取得するには、 と書きevery person whose birth date is missing value
ます。このwhose
句は、指定された述語に一致する値のみが含まれるように、前のリストをフィルタリングします。次に、add
そのリストを新しいグループに追加し、インラインで作成します。最後にsave addressbook
、変更を保存して表示します。
ただし、この場合、AppleScript はまったく必要ありません。アドレスブックはスマートグループをサポートしています。作成するには、オプションを押しながら新しいグループ ボタンをクリックします。スマート グループの名前に「誕生日なし」を選択し、「誕生日」(最初のドロップダウンから)「設定されていない」(2 番目のドロップダウンから)カードに一致するように指示します。これにより、誕生日が設定されていない人々のグループが動的に更新されます。
編集:add
Leopard ではリストを取得しますが、Snow Leopard では取得しないようです。そのため、明示的なループを使用する必要がありますrepeat
(これは Leopard でも機能します)。
tell application "Address Book"
set noBirthdays to make new group with properties {name:"No Birthday"}
repeat with p in (every person whose birth date is missing value)
add p to noBirthdays
end repeat
save addressbook
end tell
これは、前もってグループを作成し、各アイテムを個別に追加することを除いて、上記のソリューションとほぼ同じように機能します。インデックスを反復処理するのではなく、要素を直接反復処理します。
編集:他のプロパティについても同様です。実際、スマート グループを使用する場合も同じです。AppleScript 側から見ると、問題はデータの形式です。ほとんどのスロットmissing value
には未設定の場合がemail
ありますが、例外です。テストでわかるように、それらはリストに格納されているため、every person whose email is {}
. ただし、これは私にはうまくいきません。おそらくemail
がリストであるためですが、よくわかりません。したがって、代わりに
repeat with p in every person
if email of p is {} then add p to noEmails
end repeat
そしてほら、すべてがうまくいくはずです。
ビジネスの内外も簡単ですが、私が知る限り、Address Book にはそれらのスマート グループを作成する方法はありません。ただし、関連するプロパティはcompany
であり、これはtrue
ビジネス用およびfalse
その他用です。したがって、企業のないリストを作成するには、次のようにします。
repeat with p in (every person whose company is false)
add p to noCompanies
end repeat
これらの基準をすべて備えた1 つのマスターリストが必要な場合は、2 つの方法があります。まず、AppleScript から 2 つの条件とand
それらを取得し、次に電子メールがあるかどうかの条件を追加します。
repeat with p in (every person whose company is false and ¬
birth date is missing value)
if email of p is {} then add p to masterGroup
end repeat
もう 1 つのオプションは、アドレス帳からこれを行うことです。No Companies
最初に、AppleScript の方法でグループを作成する必要があります。+
次に、 「メールが設定されていない」、「誕生日が設定されていない」、「カードが「会社なし」のメンバーである」という3 つの条件 (ボタンで追加) のすべてに一致するスマート グループを作成します。グループに AppleScript を使用しなければならないのは残念ですが、これがおそらく最良の選択肢ですNo Companies
(方法があるはずだと思いますが、それが何であるかはわかりません)。