[R] Remplir un tableau sans déclarer sa taille

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
big_ben3333
Niveau 1
Niveau 1
Messages : 8
Enregistré le : lun. 10 sept. 2007 18:32
Localisation : GOLBEY
Status : Hors ligne

[R] Remplir un tableau sans déclarer sa taille

#1

Message 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 ?
Modifié en dernier par big_ben3333 le mar. 11 sept. 2007 08:18, modifié 1 fois.
big_ben3333
Niveau 1
Niveau 1
Messages : 8
Enregistré le : lun. 10 sept. 2007 18:32
Localisation : GOLBEY
Status : Hors ligne

#2

Message 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
Avatar du membre
Voodoo
Niveau 6
Niveau 6
Messages : 298
Enregistré le : ven. 20 juil. 2007 20:45
Status : Hors ligne

#3

Message par Voodoo »

Dim $tab[999999]

Apres tu peux réduire la taille une fois que tu as le tableau en redéfinissant la variable :wink:
big_ben3333
Niveau 1
Niveau 1
Messages : 8
Enregistré le : lun. 10 sept. 2007 18:32
Localisation : GOLBEY
Status : Hors ligne

#4

Message par big_ben3333 »

Ca ne craint pas trop au niveau des allocations mémoires avec Dim $tab[999999] ?
Avatar du membre
Voodoo
Niveau 6
Niveau 6
Messages : 298
Enregistré le : ven. 20 juil. 2007 20:45
Status : Hors ligne

#5

Message 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
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1550
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

#6

Message 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 ...
Modifié en dernier par sylvanie le mer. 26 sept. 2007 23:40, modifié 1 fois.
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
big_ben3333
Niveau 1
Niveau 1
Messages : 8
Enregistré le : lun. 10 sept. 2007 18:32
Localisation : GOLBEY
Status : Hors ligne

#7

Message 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.
Répondre