Fonctions
La programmation AppleScript en exemples.

Fonction rechercher/remplacer récursive.
Imaginons qu'on veuille récupérer le chemin d'accès au format Mac OS (c'est-à-dire avec le caractère ":" qui sépare les niveaux) et le passer au format UNIX (c'est-à-dire avec des slashes). Ci-dessous, vous trouverez une fonction qui effectue un "chercher-remplacer" récursif, c'est-à-dire que la fonction s'appelle elle-même. C'est un peu compliqué mais expliqué plus bas. L'interêt de la fonction est expliqué plus bas également.

Fonction 2 : récupérez l'AppleScript ici.

Le Script :

on find_and_replace(une_chaine, caractere_cherche, caractere_remplace)
set curseur to offset of caractere_cherche in une_chaine
if (curseur = 0) then
return une_chaine
else
if (curseur = 1) then
set part1 to caractere_remplace
set part2 to text 2 thru -1 of une_chaine
else
if (curseur > 0) then
set part1 to (text 1 thru (curseur - 1) of une_chaine) & caractere_remplace
set part2 to text (curseur + 1) thru -1 of une_chaine
end if
end if
return
(part1 & find_and_replace(part2, caractere_cherche, caractere_remplace))
end if
end
find_and_replace


Explications :
Le principe du "chercher-remplacer" dans une chaîne de caractères consiste à utiliser un "curseur" qui va trouver le caractère cherché dans la chaîne en donnant sa position (offset of "caractère" in "chaîne"). Ensuite, il suffit de découper la chaîne de caractères en 2, une partie 1 allant du premier caractère jusqu'avant le curseur et une partie 2 après le curseur jusqu'à la fin. Ensuite on recolle la partie 1 et la partie 2 en insérant le caractère de remplacement entre les 2. Ceci peut se faire sans problème et sans procédure récursive compliquée tant que la chaîne de caractère de remplacement ne contient pas la chaîne recherchée, par exemple si on recherche "x" pour le remplacer par "xx", on trouvera infiniment "x".
La solution résidera dans cette fonction récursive : on cherchera "x", on créera une partie 1 (avant "x") et une partie 2 (après "x") et on cherchera à niveau "x" dans la partie 2. La récursivité rédise dans le fait que la fonction s'appelle elle-même pour chercher et replacer la chaîne recherchée dans la partie 2.

Astuce & application :
• Pourquoi coder une telle fonction alors qu'elle peut être faite avec BBEdit (exemple 1) ? Tout simplement parce que cette fonction pourra être exécutée sur n'importe quelle machine puisque tout le monde n'a pas BBEdit sur sa machine.
• À quoi cette fonction peut-elle être appliquée ? On peut s'en servir pour convertir un chemin d'accès au format Mac OS vers un format UNIX comme décrit si dessus mais aussi aller plus loin : voir le script d'exemple téléchargeable. Si on veut connaitre les droits alloués à un fichier, on peut utiliser dans le Terminal la fonction UNIX "ls -l chemin_d_accès_au fichier" ou utiliser la fonction AppleScript "
do shell script". Or si le chemin d'accès au fichier contient des caractères tels que "(", ")" ou espace, on aura un message d'erreur, il faudra donc convertir le chemin d'accès en une chaîne de caractères compréhensible par le shell en replaçant " " par "\ ". Pour information, le caractère "\" annonce un caractère spécial, pour insérer le caractère "\", il faudra spécifier "\\" et ainsi de suite pour insérer remplacer les guillemets, on écrira "\\"".
• Dans l'exemple associé, on utilise la fonction "
POSIX path of" afin de remplacer ":" par "/" non pas parce que la fonction récursive, dont je me suis échigné à expliquer le fonctionnement, est merdique mais tout simplement parce que "POSIX path of" a l'extrême avantage de remplacer le nom du volume sur lequel se trouve le dossier par "/" c'est-à-dire de passer d'un chemin d'accès ressemblant à ceci :
"Machintosh HD:Users:eric:Desktop:dossier (fonction 2):exemple pour fonction 2.scpt"
à un chemin d'accès ressemblant à ceci :
"/Users/eric/Desktop/dossier (fonction 2)/exemple pour fonction 2.scpt"

C'est peut-être un détails pour vous, mais pour UNIX ça veut dire beaucoup.