Aide aux divers cours ou à votre activité - Bruno GADRAT
Pour laisser plus de temps au paysage et moins à l'informatique
Des listes, attention aux erreurs de type des listes pas des chaînes
Les variables peuvent être de divers types: des nombres, des chaînes de caractères et ... des listes. Ce qu'il y a de bien avec les listes ce que ça peut être des listes de nombres, des listes de chaînes des listes de listes et des listes de tout ça mélangé. Vous n'avez pas trop intérêt à faire trop de mélange, si vous voulez éviter les erreurs de type. Éviter les erreurs de type est certainement la chose la plus utile à maîtriser aussi bien en informatique qu'en architecture de paysage.
Les nombres s'écrivent directement, les chaînes sont "entre guillemets" et les listes sont {entre accolades}. Les items de la liste sont séparés par des virgules.
set unNombre to 12
set uneChaine to "ma chaîne"
set uneListe to {unNombre, uneChaine, 3, "quatre"}
On peut aussi y mettre des chemins d'accès aux fichiers. Attention la commande d'affichage ne peut écrire que des nombres ou des textes et pas des listes de chemins de fichiers.
set dossierchoisi to choose folder with prompt "Quel dossier faut-il prendre ?"
tell application "Finder"
set listeDesFichiers to every item of folder (dossierchoisi as alias)
end tell
display dialog (count listeDesFichiers)
display dialog (last item of listeDesFichiers as text)
Enlever un bout, en ajouter un autre quelques opérations usuelles
-- déclarer une liste
set uneListe to {1, 2, 3}
-- display dialog uneListe -- provoque une erreur de type chaîne demandée liste trouvée
display dialog ("La liste: " & uneListe as string)
-- ajouter un élément à la liste
set uneListe to 0 & uneListe & 4
display dialog ("La liste augmentée: " & uneListe as string)
-- extraire une partie de la liste
set le3emeElement to item 3 of uneListe
set Elements2a4 to items 2 thru 4 of uneListe
display dialog ("La liste:" & uneListe & "
Le troisième élément: " & item 3 of uneListe & "
Les éléments 2 à 4 de la liste: " & items 2 thru 4 of uneListe as string)
-- prendre la liste sans le premier élément
set finDeLaListe to rest of uneListe
display dialog (("La liste: " & uneListe as string) & "
rest of la liste: " & (rest of uneListe) as string)
-- retourner une liste
set listeRetournee to reverse of uneListe as string
display dialog ("Liste retournée: " & reverse of uneListe as string)
-- faire une liste sans le 4eme élément
set listeAmputee to (items 1 thru 3 of uneListe) & (items 5 thru (count of uneListe) of uneListe)
display dialog (("La liste originale: " & uneListe as string) & "
La liste amputée du 4eme élément: " & listeAmputee)
-- faire une liste en retirant un élément connu au milieu de la liste
set elementretire to 2
repeat with i from 1 to count uneListe
if item i of uneListe is elementretire then
set listeAmputee2 to (items 1 thru (i - 1) of uneListe) & (items (i + 1) thru (count of uneListe) of uneListe)
end if
end repeat
display dialog (("La liste originale: " & uneListe as string) & "
La liste amputée du " & elementretire & ": " & listeAmputee2)
Vous pouvez charger le code de ces exemples soit en copiant à l'écran soit par ce fichier AppleScript-listes.scpt.zip.
Effet de bord
Vous avez remarqué que dans une liste, il y a des bouts et que c'est une grande source d'erreurs. Une fonction peut régler le problème.
-- la liste initiale et l'appel de la fonction
set listeOriginale to {"abricot ", "brugnon ", "cerise ", "datte "}
set listeAmputee to enleveDeLaListe(listeOriginale, 2)
display dialog (("liste originale:
" & listeOriginale as string) & "
liste amputée:
" & listeAmputee as string)
-- fonction qui enlève un élément d'une liste en AppleScript
on enleveDeLaListe(uneListe, positionElementAEnlever)
-- display dialog length of uneListe
if (positionElementAEnlever > (length of uneListe)) or (positionElementAEnlever < 1) or (length of uneListe < 1) then
display dialog "Liste impossible à traiter"
return uneListe
else
if positionElementAEnlever = 1 then -- élément au début
return rest of uneListe
else
if positionElementAEnlever = (length of uneListe) then -- élément à la fin
return (items 1 thru (positionElementAEnlever - 1) of uneListe)
else -- élément au milieu
set uneListeDebut to (items 1 thru (positionElementAEnlever - 1) of uneListe)
set uneListeFin to ((items (positionElementAEnlever + 1) thru -1) of uneListe)
set uneListe to uneListeDebut & uneListeFin
return uneListe
end if
end if
end if
end enleveDeLaListe