Ecriture et lecture d'une liste

titigrou

Membre expert
Club iGen
23 Décembre 2004
1 107
26
41
Lille
Hello!

J'essaye de faire un petit script en Applescript, afin de demander n fois (n >5 dans mon cas), un nom, et de stocker ces 5 noms dans un tableau, pour pouvoir ensuite récupérer par exemple le 3ème nom de ce tableau.

Mon code ressemble à ça
Bloc de code:
set Liste_1 to {"          ", " ", " ", " ", " ", " ", " ", " ", " ", " "} as list


display dialog "Nombre noms à saisir" default answer ""
set nombre_noms to text returned of result as number
set n to 0 as number

repeat nombre_noms times
    set n to n + 1
    display dialog " Nom: " default answer ""
    set nom_temp to text returned of result as text
    copy nom_temp to item n of Liste_1
    set maChaine1 to Liste_1 as string
    maChaine1 as list
end repeat

display dialog item 2 of maChaine1 & " "

Si je saisis, par exemple 3 noms, j'ai bien mes 3 fenêtres Noms qui s'affichent, je rentre AAA, ZZZ et EEE par exemple, et mon display dialog m'affiche Z uniquement.

Quelqu'un voit d'où le problème peut venir?
Je pense qu'il s'agit d'un problème de longueur de liste mais je ne m'y connais pas assez pour voir comment le résoudre!

Merci d'avance pour votre aide!

Antoine
 
Bonjour,


C'est parce que la variable "maChaine1" contient du texte, ce n'est pas une liste.
Donc, item 2 of maChaine1 donnera le deuxième caractère dans cette variable.

SI vous voulez obtenir un élément dans une liste, il faut faire comme ceci:

Bloc de code:
set Liste_1 to {}

display dialog "Nombre noms à saisir" default answer ""
set nombre_noms to text returned of result as number

repeat nombre_noms times
    set end of Liste_1 to text returned of (display dialog " Nom: " default answer "")
end repeat

display dialog (item 2 of Liste_1)
 
Ahhh merci infiniment ça marche parfaitement!
Dernière question, si je veux afficher après un display dialog résumant tout ça, c'est possible?
Pour le moment j'affiche que l'item 2, mais j'aimerai boucler pour afficher les 4 si j'en mets 4, un sur chaque ligne

Bloc de code:
set Liste_1 to {}
set Liste_2 to {}

display dialog "Nombre noms à saisir" default answer ""
set nombre_noms to text returned of result as number


set n to 0 as number
repeat nombre_noms times
    set n to n + 1
    set end of Liste_1 to text returned of (display dialog " Nom " & n & ":" default answer "")
    set end of Liste_2 to text returned of (display dialog " Numéro:" & n & ":" default answer "")
end repeat

set n to 0 as number
repeat nombre_noms times
    set n to n + 1
   
    display dialog (item n of Liste_1) & " " & (item n of Liste_2)
   
end repeat
 
Dernière édition:
Ahhh merci infiniment ça marche parfaitement!
Dernière question, si je veux afficher après un display dialog résumant tout ça, c'est possible?
Pour le moment j'affiche que l'item 2, mais j'aimerai boucler pour afficher les 4 si j'en mets 4, un sur chaque ligne
Oui, cela est possible, il faut utiliser les text item delimiters.

Par défaut, le text item delimiters est vide --> ""
Par exemple cette liste {"aaa","bob","ccc"}, la convertir en texte, donnera "aaabobccc".

Pour obtenir un texte dont les éléments seront séparés par une ligne, c'est comme ceci :

Bloc de code:
set defTid to text item delimiters
set text item delimiters to return -- fin de ligne Mac
set mesNoms to Liste_1 as string
set mesNumeros to Liste_2 as string
set text item delimiters to defTid -- reset the text item delimiters
display dialog mesNoms
display dialog mesNumeros
 
Alors j'ai essayé en mixant tout ça, et j'ai le code suivant
Bloc de code:
set Liste_1 to {}
set Liste_2 to {}

display dialog "Nombre noms à saisir" default answer ""
set nombre_noms to text returned of result as number
set n to 0 as number
repeat nombre_noms times
    set n to n + 1
    set end of Liste_1 to text returned of (display dialog " Nom " & n & ":" default answer "")
    set end of Liste_2 to text returned of (display dialog " Numéro:" & n & ":" default answer "")
end repeat


set defTid to text item delimiters
set text item delimiters to return -- fin de ligne Mac
set mesNoms to Liste_1 as string
set mesNumeros to Liste_2 as string
set text item delimiters to defTid -- reset the text item delimiters
display dialog mesNoms & mesNumeros
--display dialog mesNumeros

Mais mon display dialog est fichu bizarrement, j'aimerai que une ligne corresponde à un nom et le numéro associé, et on pas comme sur la pièce jointe!

J'ai mis comme Nom1: A et numéro 1 et Nom 2: Z et numéro 2...

Tu vois en gros?
 

Fichiers joints

  • Sans titre.webp
    Sans titre.webp
    1,3 KB · Affichages: 245
Alors j'ai essayé en mixant tout ça

Mais mon display dialog est fichu bizarrement, j'aimerai que une ligne corresponde à un nom et le numéro associé

Ok,

Cela peut se faire comme ceci :

Bloc de code:
set Liste_1 to {}
set Liste_2 to {}
set Liste_1_2 to {}

display dialog "Nombre noms à saisir" default answer ""
set nombre_noms to text returned of result as number
repeat with n from 1 to nombre_noms
    set end of Liste_1 to text returned of (display dialog " Nom " & n & ":" default answer "")
    set end of Liste_2 to text returned of (display dialog " Numéro:" & n & ":" default answer "")
    set end of Liste_1_2 to last item of Liste_1 & ":" & last item of Liste_2
end repeat

set defTid to text item delimiters
set text item delimiters to return -- fin de ligne Mac
set nomsEtNumeros to Liste_1_2 as string
set text item delimiters to defTid -- reset the text item delimiters
display dialog nomsEtNumeros
------------------

Ou comme ceci :
Bloc de code:
set Liste_1 to {}
set Liste_2 to {}
set nomsEtNumeros to ""

display dialog "Nombre noms à saisir" default answer ""
set nombre_noms to text returned of result as number
repeat with n from 1 to nombre_noms
    set end of Liste_1 to text returned of (display dialog " Nom " & n & ":" default answer "")
    set end of Liste_2 to text returned of (display dialog " Numéro:" & n & ":" default answer "")
    set nomsEtNumeros to nomsEtNumeros & last item of Liste_1 & ":" & last item of Liste_2 & return
end repeat
display dialog nomsEtNumeros
-----

Ou comme ceci, si les listes ne sont pas nécessaires plus tard dans votre script :
Bloc de code:
set nomsEtNumeros to ""

display dialog "Nombre noms à saisir" default answer ""
set nombre_noms to text returned of result as number
repeat with n from 1 to nombre_noms
    set t1 to text returned of (display dialog " Nom " & n & ":" default answer "")
    set t2 to text returned of (display dialog " Numéro:" & n & ":" default answer "")
    set nomsEtNumeros to nomsEtNumeros & t1 & ":" & t2 & return
end repeat
display dialog nomsEtNumeros