Page 1 sur 1
[R] Remplir un tableau sans déclarer sa taille
Posté : lun. 10 sept. 2007 18:49
par big_ben3333
Bonjour,
C'est certainement un truc tout bète, mais je butte dessus depuis hier.
Je voudrais simplement remplir le tableau $tab sans déclarer sa taille (que je ne connais pas) avec Dim.
Code : Tout sélectionner
#Include <Array.au3>
Dim $tab
For $i = 0 To 10
$tab[$i] = 'test'
Next
_ArrayDisplay($tab, 'TEST')
Ce qui donne bien gentillement :
test.au3 (5) : ==> Expected a "=" operator in assignment statement.
J'ai bien essayé avec _ArrayPush et _ArrayAdd, mais ca revient au même. J'ai également pensé à ne pas déclarer le tableau et d'utiliser l'option d'autoIt qui n'oblige pas les déclarations de variable, mais c'est pas propre...
Y'aurai t'il une âme charitable qui saurait m'aiguiller ?
Posté : lun. 10 sept. 2007 19:16
par big_ben3333
Erf, C'est toujours quand on pose la question correctement que l'on trouve la réponse :
Code : Tout sélectionner
#Include <Array.au3>
Dim $tab[1]
For $i = 1 To 10
_ArrayInsert($tab, $i, "test")
Next
_ArrayDisplay($tab, 'TEST')
Il faut déclarer quand même un tableau de taille 1 pour que ca soit valide. Les fonctions _ArrayInsert et autres s'occupent de le redimentionner à sa réelle taille.
Un peu tordu quand même je trouve :S
Posté : lun. 10 sept. 2007 19:17
par Voodoo
Dim $tab[999999]
Apres tu peux réduire la taille une fois que tu as le tableau en redéfinissant la variable

Posté : lun. 10 sept. 2007 19:21
par big_ben3333
Ca ne craint pas trop au niveau des allocations mémoires avec Dim $tab[999999] ?
Posté : lun. 10 sept. 2007 19:43
par Voodoo
C'était juste pour un exemple ! tu mets a peu prés 90 si tu pense avoir autour de se nombre puis tout de suite apres tu réduis l'array !
La solution de big ben m'a l'air moin hasardeuse :S
Posté : lun. 10 sept. 2007 20:42
par sylvanie
une autre méthode, dont l'inconvénient est de trouver un délimiteur dont on est sûr qu'il ne soit jamais contenu dans aucun élément du tableau, mais qui a un coups en temps bien moins grand que la première méthode évoquée, est de contruire une chaîne de cararctère dynamiquement et de passer par stringsplit :
Code : Tout sélectionner
#Include <Array.au3>
Dim $tab[1]
$start = TimerInit ( )
For $i = 1 To 1000
_ArrayInsert ( $tab , $i , " test " )
Next
ConsoleWrite ( TimerDiff ( $start ) &@CRLF )
_ArrayDisplay ( $tab , 'TEST' )
$string = " "
$delimiter = " ||| "
$start = TimerInit ( )
For $i = 1 To 1000
$string& = " test " &$delimiter
Next
$tab = StringSplit ( $string , $delimiter , 1 )
$tab[0] - = 1;le split inclus dans ce cas un élément vide en trops , donc on décrémente l'indice 0 coorespondant à la taille du tableau
ConsoleWrite ( TimerDiff ( $start ) )
_ArrayDisplay ( $tab , 'TEST2' )
dans mon cas j'ai 2,8 secondes avec la méthode 1 et 20 ms pour la 2 eme ...
Posté : mar. 11 sept. 2007 00:31
par big_ben3333
Ok, Merci à vous, Je vais opter pour la méthode à sylvanie.
Je trouve tout de même curieux que les tableaux ne soient pas plus simples à manipuler...
Cependant AutoIt c'est tellement facile comparé à VB ou autre...
Enfin, sans la bonne documentation, je pense que ca serais différent.