2

アドレス帳のメモ欄に 2 行あります

Test 1
Test 2

各行を個別の値として取得するか、メモ フィールドから最後の行を取得したいと考えています。

私はこのようにしてみました:

tell application "Address Book"
 set AppleScript's text item delimiters to "space"
 get the note of person in group "Test Group"
end tell

しかし、結果は

{"Test 1
Test 2"}

を探しています :

{"Test1","Test2"}

私は何を間違っていますか?

4

1 に答える 1

5

コードにはいくつか問題があります。まず、メモのテキスト項目を実際に要求することはありません :-) 生の文字列を取得するだけです。2 つ目はset AppleScript's text item delimiters to "space"、テキスト項目の区切り文字を文字列リテラルに設定することspaceです。したがって、たとえば、実行中

set AppleScript's text item delimiters to "space"
return text items of "THISspaceISspaceAspaceSTRING"

戻り値

{"THIS", "IS", "A", "STRING"}

" "第二に、代わりにを持っていたとしても、改行ではなく"space"スペースで文字列を分割します。たとえば、実行中

set AppleScript's text item delimiters to " "
return text items of "This is a string
which is on two lines."

戻り値

{"This", "is", "a", "string
which", "is", "on", "two", "lines."}

ご覧のとおり"string\nwhich"、単一のリスト項目です。

あなたがやりたいことをするために、あなたはただ使うことができますparagraphs of STRING; たとえば、実行中

return paragraphs of "This is a string
which is on two lines."

希望を返します

{"This is a string", "which is on two lines."}

今、私はあなたが何をしたいのか正確にははっきりしていません。特定の人のためにこれを取得したい場合は、次のように書くことができます

tell application "Address Book"
    set n to the note of the first person whose name is "Antal S-Z"
    return paragraphs of n
end tell

はコマンドであると思いますparagraphs of ...が、最初の行はすべてプロパティ アクセスです。(正直に言うと、私は通常、試行錯誤を経てこれらのことを発見します。)

一方、グループ内のすべての人についてこのリストを取得したい場合は、少し難しくなります。大きな問題の 1 つは、メモを持っていない人missing valueが文字列ではないメモを受け取ることです。これらの人々を無視したい場合は、次のループが機能します

tell application "Address Book"
    set ns to {}
    repeat with p in ¬
        (every person in group "Test Group" whose note is not missing value)
        set ns to ns & {paragraphs of (note of p as string)}
    end repeat
    return ns
end tell

ビットは、every person ...関連する人々を取得して、それが言うことを正確に実行します。note of p次に、メモの段落を抽出します (実際には文字列であることを AppleScript に思い出させた後)。この後、 のnsようなものが含まれます{{"Test 1", "Test 2"}, {"Test 3", "Test 4"}}

于 2010-12-25T06:50:55.087 に答える