# Ecriture et lecture d'une liste



## titigrou (7 Avril 2016)

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

```
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


----------



## JacqR (7 Avril 2016)

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:


```
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)
```


----------



## titigrou (7 Avril 2016)

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


```
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
```


----------



## JacqR (7 Avril 2016)

titigrou a dit:


> 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 :


```
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
```


----------



## titigrou (8 Avril 2016)

Alors j'ai essayé en mixant tout ça, et j'ai le code suivant

```
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?


----------



## JacqR (8 Avril 2016)

titigrou a dit:


> 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 :


```
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 :

```
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 :

```
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
```


----------

