-----------------------
INTRO
-----------------------

Quand on manipule des donnees on a souvent besoin de fractionner ces donnees, de faire des rechercher-remplacer, de compter les occurences d'une
chaine de caracteres...
Pour faire tout ceci il existe un outil simple : les separateurs de texte d'Applescript. Passer par ces separateurs n'est pas toujours la technique la plus performante, mais elle a le merite de ne pas necessiter d'OSAX et d'être (relativement) multiusage.

le delimiteur par defaut est le string "", c'est d'ailleurs toujours un string.

pour definir un delimiteur il suffit de taper ceci :

    set Applescript's text item delimiters to "Mon Nouveau Delimiteur"

(on remarque donc que les text item delimiters sont une propriete d'Applescript)

Concernant cette syntaxe deux ecoles s'affrontent. La premiere declare qu'il faut reinitialiser les Applescript's text item delimiters apres usage, c'est a dire qu'il faut leur rendre la valeur initiale. Cela impose de stocker cette valeur pour pouvoir la remettre ensuite :

    set MesVieuxDelimiters to Applescript's text item delimiters
    set Applescript's text item delimiters to "Mon Nouveau Delimiteur"
    (blahblah mon script)
    set Applescript's text item delimiters to MesVieuxDelimiters

La seconde ecole, declare qu'il n'est pas utile de reinitialiser cette propriete.

Personnellement, je n'ai pas de preference, mais il faut savoir que la modification d'une propriete d'AppleScript reste valable jusqu'au prochain changement pour un script donne... donc si on utilise beaucoup les text item delimiters il peut être plus sur de les reinitialiser apres chaque utilisation pour eviter les mauvaises surprises.

-----------------------
UTILISATION
-----------------------

voyons ce que donne ceci :

    set MaListe to text items of "Ceci est une phrase"
    --> renvoie la liste {"C","e","c","i"," ","e","s","t"," ","u","n","e","
    ","p","h","r","a","s","e"}

par defaut le text item delimiters est "", on constate bien que la phrase est decoupee a chaque occurence de "". On remarque aussi que le string "" n'apparait pas dans la liste resultante.

Par contre, n'oubliez pas que vous pouvez utiliser directement :

    set MaListe to words of "Ceci est une phrase"

pour obtenir la liste des mots de la phrase.

posons maintenant ceci :

    set AppleScript's text item delimiters to "e"
    set MaListe to text items of "Ceci est une phrase"
    --> renvoie : {"C", "ci ", "st un", " phras", ""}

De même, la phrase est decoupee a chaque occurence de "e", et "e" n'apparait pas dans le resultat. On compte ici 5 objets dans la liste, et 4 "e" dans la phrase :

    set NombreDeE to (length of MaListe) - 1
    --> 4, soit le nombre de "e" dans la phrase

On peut alors facilement compter n'importe quelle chose dans un string (dont je rapelle que la longueur est limite a 32Ko)

[script Occurences]
set MaRecherche to "e"
set MesVieuxDelimiters to Applescript's text item delimiters
set AppleScript's text item delimiters to MaRecherche
try
set MonText to open for access (choose file of type {"TEXT"})
set MonStream to read MonText
on error
display dialog "le text est probablement trop long...32Ko maxi !"
end try
set MaListe to text items of MonStream
set MaLongueur to length of MaListe
set MonNombre to MaLongueur - 1
display dialog "Il y'a " & MonNombre & " " & MaRecherche & " dans le texte"
set Applescript's text item delimiters to MesVieuxDelimiters
[/script]
 

Etudions cette variante :

    set AppleScript's text item delimiters to "e"
    set MaListe to text items of "Ceci est une phrase"
    set AppleScript's text item delimiters to "A"
    set MonString to MaListe as string
    --> renvoie : "CAci Ast unA phrasA"

voila qui devient interessant ! Nous sommes capables de faire du rechercher-remplacer tres facilement. De maniere plus generale, on deduit du script ci-dessus une chose tres importante : le text item delimiters sert dans les deux sens : pour decomposer un string en une liste d'objets, mais aussi pour recomposer un string a partir d'une liste !
Il est maintenant clair que la reinitialisation du delimiteur n'est pas toujours superflue.

On peut alors donner libre-cours a notre imagination : cette technique simple permet le chercher-remplacer, la suppression...et toutes les combinaisons qui vous semblent utiles.

Un exemple classique et tres utile est la manipulation de chemin. En effet les chemins de fichier au format Mac se presentent comme ceci :

    "MonDisque:Mondossier:MonAutreDossier:MonFichier"

il est souvent utile de pouvoir recuperer les noms des sous dossiers, le nom du disque ou plus generalement de pouvoir decomposer ce chemin en elements distincts.
En utilisant comme delimiteur ":" on peut alors obtenir facilement la liste de tous les elements d'un chemin et le recomposer en omettant par exemple le(s) dernier(s) element(s) (chemin d'un dossier superieur) ou en remplacant le dernier element (chemin vers un objet qui se trouve au même endroit que celui decrit par le chemin)...
 

voila pour aujourd'hui
 

patpro