2 votes

Obtenir ligne par ligne dans Apple script à partir du champ Note du carnet d'adresses

J'ai deux lignes dans le champ de notes de mon carnet d'adresses

Test 1
Test 2

J'aimerais obtenir chaque ligne comme une valeur séparée ou obtenir la dernière ligne du champ "notes".

J'ai essayé de le faire de cette manière :

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

mais le résultat est

{"Test 1
Test 2"}

Je recherche :

{"Test1","Test2"}

Qu'est-ce qui n'est pas correct ?

5voto

Antal S-Z Points 17977

Il y a plusieurs choses qui ne vont pas dans votre code. Tout d'abord, vous ne demandez jamais les éléments de texte de la note :-) Vous obtenez simplement la chaîne brute. La seconde est que set AppleScript's text item delimiters to "space" définit les délimiteurs des éléments de texte à la chaîne littérale space . Ainsi, par exemple, l'exécution de

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

retours

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

Deuxièmement, même si vous aviez " " au lieu de "space" ce qui aurait pour effet de couper votre chaîne de caractères sur les espaces, et no les nouvelles lignes. Par exemple, l'exécution de

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

retours

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

Comme vous pouvez le constater, "string\nwhich" est un élément de liste unique.

Pour faire ce que vous voulez, vous pouvez simplement utiliser paragraphs of STRING ; par exemple, en exécutant

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

renvoie l'information souhaitée

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

Je n'ai pas tout à fait compris exactement ce que vous voulez faire. Si vous voulez l'obtenir pour une personne spécifique, vous pouvez écrire

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

Il faut la diviser en deux déclarations parce que, je pense, paragraphs of ... est une commande, alors que tout ce qui se trouve sur la première ligne est un accès à une propriété. (Pour être honnête, je découvre généralement ces choses par tâtonnement).

En revanche, si vous souhaitez obtenir cette liste pour chaque personne d'un groupe, c'est un peu plus difficile. L'un des principaux problèmes est que les personnes qui n'ont pas de note obtiennent missing value pour leur note, qui n'est pas une corde. Si vous voulez ignorer ces personnes, la boucle suivante fonctionnera

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

En every person ... fait exactement ce qu'il dit, en obtenant les personnes concernées ; nous extrayons ensuite les paragraphes de leur note (après avoir rappelé à AppleScript que l'élément note of p est réellement une chaîne de caractères). Après cela, ns contiendra quelque chose comme {{"Test 1", "Test 2"}, {"Test 3", "Test 4"}} .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X