Получение строки за строкой в ​​Apple Script из поля примечания адресной книги - PullRequest
2 голосов
/ 25 декабря 2010

У меня есть две строки в поле примечания моей адресной книги

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"}

Что я делаю неправильно?

1 Ответ

5 голосов
/ 25 декабря 2010

В вашем коде есть несколько ошибок.Во-первых, вы никогда не запрашиваете текстовые примечания :-) Вы просто получаете необработанную строку.Во-вторых, 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 ... - это команда, тогда как все в первой строкедоступ к собственности.(Честно говоря, я обычно обнаруживаю эти вещи методом проб и ошибок).

Если, с другой стороны, вы хотите получить этот список для каждого человека в группе, это немного сложнее.Одна большая проблема состоит в том, что люди без примечания получают 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 ... делает именно то, что говорит, получая соответствующих людей;затем мы извлекаем абзацы их заметки (после напоминания AppleScript, что note of p действительно является строкой).После этого ns будет содержать что-то вроде {{"Test 1", "Test 2"}, {"Test 3", "Test 4"}}.

...