

![]() | Start a set with this search |
![]() | Include this search in one of my sets |
![]() | Exclude this search from one of my sets |
![]() | Permalink to these results Paste this link in email or IM: |
| Atom feed for tracking future search results Paste this URL into your reader: |
2 messages in org.openoffice.fr.progRe: [prog] Initialisation de tableau| From | Sent On | Attachments |
|---|---|---|
| Yffic Cloarec | Apr 26, 2007 12:07 pm | |
| Bernard Marcelly | Apr 27, 2007 2:08 am |

![]() | Permalink for this message Paste this link in email or IM: |
![]() | Permalink for this thread Paste this link in email or IM: |
| Atom feed for this thread Paste this URL into your reader: |
| Subject: | Re: [prog] Initialisation de tableau | Actions... |
|---|---|---|
| From: | Bernard Marcelly (marc...@club-internet.fr) | |
| Date: | Apr 27, 2007 2:08:32 am | |
| List: | org.openoffice.fr.prog | |
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







