[..] Déclaration d'un tableau à 2 Dimensions (pb syntaxe)

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Nimrod76
Niveau 1
Niveau 1
Messages : 1
Enregistré le : jeu. 24 mars 2011 20:46
Status : Hors ligne

[..] Déclaration d'un tableau à 2 Dimensions (pb syntaxe)

#1

Message par Nimrod76 »

Bonjour,

Je me suis lancé il n'y a pas longtemps dans la programmation Autoit, et c'est donc récemment que j'ai découvert ce forum d'entre aide qui m'a déjà bien aidé ! :D

Bref, j'ai un problème qui vous semblera certainement un peu bête mais qui me turlupine depuis 2 jours :

Je ne comprend pas pourquoi cette façon de déclarer un tableaux à 2 dimensions ne fonctionne pas :

Code : Tout sélectionner

Dim $tabA[3] = ["a1","a2","a3"]
Dim $tabB[3]= ["b1","b2","b3"]
Dim $tabC[3] = ["c1","c2","c3"]
Dim $tabD[3] = ["d1","d2","d3"]

Dim $Grille[4][3] = [ $tabA, $tabB, $tabC, $tabD]

 
En revanche de cette façon ça fonctionne :

Code : Tout sélectionner

Dim $Grille[4][3] =[ [ "a1","a2","a3"], [ "b1","b2","b3"], [ "c1","c2","c3"],  [ "d1","d2","d3"] ]
 
Pourquoi ces 2 méthodes ne sont elles pas équivalentes ? :?

Merci beaucoup !
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Déclaration d'un tableau à 2 Dimensions (pb syntax

#2

Message par jchd »

Code : Tout sélectionner

Dim $Grille[4][3] = [ $tabA, $tabB, $tabC, $tabD]
déclare un tableau de 4x3 mais initialise un tableau de 4x1

Par ailleurs, comme l'indique l'aide, les tableaux dans les tableaux sont généralement à proscrire et amènent toujours une complexité d'emploi.

Pour mémoire, si l'on déclare :

Code : Tout sélectionner

Dim $tabA[3] = ["a1","a2","a3"]
Dim $tabB[3]= ["b1","b2","b3"]
Dim $tabC[3] = ["c1","c2","c3"]
Dim $tabD[3] = ["d1","d2","d3"]

Dim $Grille[4][3] = [[ $tabA], [$tabB], [$tabC], [$tabD]]
on n'obtient pas ce qu'on croit voir :
► Afficher le texte
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

Re: [..] Déclaration d'un tableau à 2 Dimensions (pb syntax

#3

Message par matwachich »

Pour plus de compréhension, je dirai
► Afficher le texte
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Déclaration d'un tableau à 2 Dimensions (pb syntax

#4

Message par Iste »

C'est la une "faiblesse" d'autoit, on ne peut pas coller directement de [] sur autre chose qu'une variable.
En claire, maFunc()[5] ne fonctionne pas, et dans le cadre d'un tableau de tableau, $var[0][5] ne fonctionnera pas non plus.
On est donc obligé de faire la différence entre les tableaux a plusieurs dimension et les tableaux de tableaux.
Signez ici
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Déclaration d'un tableau à 2 Dimensions (pb syntax

#5

Message par jchd »

Oui, les tableaux AutoIt sont des "citoyens de première classe" et donc [n] n'est pas un opérateur "modificateur de type" comme dans d'autres langages. Du coup on ne peut certes pas écrire MaFonc($i)[3] mais on peut en revanche assigner une valeur (tableau) d'initialisation à une autre variable :

Code : Tout sélectionner

$ar[3] = [ 1, 2, 3 ]
$dup = $ar    ; fonctionne
C'est pourquoi il est presque toujours nécessaire de passer un tableau "ByRef" à une fonction, pour éviter sa duplication et même si la fonction qui l'accepte en paramètre ne le modifie pas. C'est à peu près indolore pour de tout petits tableaux, mais rapidement gourmand dès qu'on travaille avec un encombrement moins négligeable ou lors d'appels fréquents.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Déclaration d'un tableau à 2 Dimensions (pb syntax

#6

Message par Iste »

Ho, merci beaucoup pour cette info
Je me demandais justement pourquoi array.au3 utilisé autant le byref, sans sans servir.
Mais c'est vrai que vu comme ca, c'est logique !
Signez ici
Répondre