Message de Yffic Cloarec  date 2007-04-26 21:08 :
Bonjour

Je ne comprends pas bien l'initialisation d'un tableau a 2 dimensions

Dim toto(10,3)

toto = Array( Array("Arm", 0 , 10), _
                 Array("Aur", 0 , 10), _
                 Array("Val", 0 , 10), _
                 Array("Mar", 0 , 10), _
                 Array("Nic", 0 , 10), _
                 Array("Flo", 0 , 10), _
                 Array("Nel", 0 , 10), _
                 Array("Yff", 0 , 10), _
                 Array("JM" , 0 , 10), _
                 Array("Mat", 0 , 10), _
                                 )

titi = toto(0,1) 'Titi vaut le tableau ("Arm",0,10)

Comment acceder directement a "Arm" ?


Bonjour,
C'est effectivement déroutant, mais cela s'explique.
La raison est que tu n'as pas initialisé un tableau à 2 dimensions !
Tu as déclaré un tableau à deux dimensions, puis tu as en fait créé un tableau de tableaux avec la fonction Array. Ce n'est pas identique en OOoBasic.

On peut mieux comprendre en utilisant Xray (la version actuelle distingue mieux les tableaux multidimensionnels et les tableaux de tableaux).

Tu aurais du déclarer toto en Variant sans dimension.
Avec Xray pour visualiser, cela donne:

Dim toto, titi, tata, tutu(10,3)

toto = Array( Array("Arm", 0 , 10), _
                 Array("Aur", 0 , 10), _
                 Array("Val", 0 , 10), _
                 Array("Mar", 0 , 10), _
                 Array("Nic", 0 , 10), _
                 Array("Flo", 0 , 10), _
                 Array("Nel", 0 , 10), _
                 Array("Yff", 0 , 10), _
                 Array("JM" , 0 , 10), _
                 Array("Mat", 0 , 10), _
                                 )

xray tutu  ' tableau multidimensionnel
xray toto  ' tableau de tableau
tata = toto(0)
xray tata  ' tableau  "Arm", 0 , 10
xray tata(0) ' "Arm"
titi = toto(0,12345)
xray titi  ' tableau  "Arm", 0 , 10

Pourquoi ce résultat sur titi ? Parce que pour un Variant, Basic ignore les indices inutiles. Lorsque Basic traite toto(0,0) il ne voit qu'un tableau unidimensionnel. Le fait que chaque élément de ce tableau soit lui-même un tableau n'est pas pris en compte. Pour accèder à une valeur dans un tableau de tableau il faut obligatoirement extraire chaque sous-tableau dans une variable intermédiaire.

Comme expliqué dans le livre Programmation OpenOffice.org 2 page 99, la fonction Array permet de créer des tableaux irréguliers, pas seulement des matrices rectangulaires. Ce qui peut expliquer le comportement de Basic: avec des Variant il doit s'attendre à toutes les bizarreries.

Inversement, avec une variable déclarée tableau multidimensionnel il n'est pas possible d'extraire d'un coup un sous-tableau. Toute utilisation de la variable doit comporter tous les indices.

   Bernard

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Répondre à