Array à plusieurs dimensions

Résolu
Signaler
Messages postés
115
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
25 mars 2008
-
Messages postés
115
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
25 mars 2008
-
Bonjour,


Voilà mon soucis... mes tableaux CalsseB et ClasseC ne fonctionnent pas... il ne sont pas remplis alors que bGroupe[j].nodeName; et cGroupe[k].nodeName; ne sont pas vides... du coup mes variables
infoA2 = ClasseB[1][0];
infoA3 = ClasseC[2][0][0]; sont en undefined .


Je ne comprends pas si c'est un probleme de déclaration des tableaux ou autre chose.


function traiteXML(success) {
// on récupère toutes les données hiérarchisées du xml dans différents tableaux
if(success) {

aGroupe = xmlExo.firstChild.firstChild.childNodes;
for( i=0; i<aGroupe.length; i++ ) {
ClasseA[i] = aGroupe[i].nodeName;
bGroupe = aGroupe[i].childNodes;
for( j=0; j<bGroupe.length; j++ ) {
ClasseB[i] = new Array();
ClasseB[i][j] = bGroupe[j].nodeName;
cGroupe = bGroupe[j].childNodes;
for( k=0; k<cGroupe.length; k++ ) {
ClasseC[i][j] = new Array();
ClasseC[i][j][k]=cGroupe[k].nodeName;
}
}
}
infoA1 = ClasseA[0];
infoA2 = ClasseB[1][0];
infoA3 = ClasseC[2][0][0];
gotoAndPlay(2);
} else {
info = "erreur";
}


}

Zitoun

6 réponses

Messages postés
1596
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
9 juin 2011
2
Cette histoire de 3 dimensions qui marche pas, ça me plaisait pas! lol



Donc voilà un p'tit test que je viens de faire:



//déclare qqch pour ton tableau à 3 dimensions (de préférence plus grand que tes besoins!

tab3=[ [["1","2"],["3","4"]] , [["5","6"],["7","8"]] , [["9","10"],["11","12"]] ];



//Vérification de la correspondance des cellules:

for(i=0;i<2;i++){

for(j=0;j<2;j++){

for(k=0;k<2;k++){

trace("i"+i+"/j="+j+"/k="+k+"::"+tab3[i][j][k]);

}

}

}



//Remplissage du tableau à 3 dimensions:

for(i=0;i<2;i++){

for(j=0;j<2;j++){

for(k=0;k<2;k++){

//mets ton affectation ici

tab3[i][j][k]="i="+i+"/j="+j+"/k="+k;

}

}

}



//Vérification de l'affectation:

for(i=0;i<2;i++){

for(j=0;j<2;j++){

for(k=0;k<2;k++){

trace(tab3[i][j][k]);

}

}

}



Voilà...en espérant que ça puisse t'être utile (rq: pas de déclaration avec new Array)



@+! Samy
Messages postés
1596
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
9 juin 2011
2
Moi je déclarerais mes tableaux à l'extérieur des boucles FOR, non?



function traiteXML(success) {
// on récupère toutes les données hiérarchisées du xml dans différents tableaux
if(success) {

aGroupe = xmlExo.firstChild.firstChild.childNodes;
for( i=0; i<aGroupe.length; i++ ) {
ClasseA[i] = aGroupe[i].nodeName;
bGroupe = aGroupe[i].childNodes;

ClasseB[i] = new Array();

for( j=0; j<bGroupe.length; j++ ) {
ClasseB[i][j] = bGroupe[j].nodeName;
cGroupe = bGroupe[j].childNodes;

ClasseC[i][j] = new Array();

for( k=0; k<cGroupe.length; k++ ) {
ClasseC[i][j][k]=cGroupe[k].nodeName;
}
}
}
infoA1 = ClasseA[0];
infoA2 = ClasseB[1][0];
infoA3 = ClasseC[2][0][0];
gotoAndPlay(2);
} else {
info = "erreur";
}



}



...sinon je vois pas...t'as essayé de faire un trace à la place de
l'affectation pour voir si lors de l'affectation y'a vraiment qqch à
affecter?



@+! Samy
Messages postés
115
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
25 mars 2008

J'ai commencé par déclarer mes tableaux à l'extérieur de la boucle... pas mieux
bGroupe[j].nodeName;
et
cGroupe[k].nodeName;

ne sont pas vides... quand je l'es trace ils sont ok... mon seul soucis est que ça ne remplis pas les tableaux correspondants, seule une valeur est affectée par tableau !!! C'est la dernière valeur.
Quand je trace trace(ClasseB[i][j]); dans la boucle ça marche... une fois sortie de la boucle il ne me reste que cette valeur de fin... comme si à chaque fois la valeur précédente s'effacée.

Merci de l'aide

Zitoun
Messages postés
1596
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
9 juin 2011
2
Essaie voir de déclarer tes tableaux comme ça:



ClasseB=new Array();

ClasseC=new Array();



...si t'as la dernière...soit il efface (ce qui m'étonnerait), soit il recrée ton tableau ou alors il est mal créé.

J'ai pas bcp joué avec les tableaux, donc si là ça marche pas, j'vais sécher j'crois!



@+! Samy
Messages postés
115
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
25 mars 2008

Salut Samy...

grâce à tes remarques j'avance...

j'ai effectivement replacé le tablo ClasseA hors de la boucle car en fait il recréé le tablo à chaque fois et c'était donc pour ça qu'il n'avait que la dernière valeur.
Pour le tablo ClasseC par contre ça ne parche pas mieux, j'ai donc compilé les variables i et j :

ClasseA = new Array();
ClasseB = new Array();
ClasseC = new Array();


xmlExo = new XML;
xmlExo.ignoreWhite = true;
xmlExo.onLoad = traiteXML;
xmlExo.load("apprend.xml");
// attend la fin du chargement du fichier avant de poursuivre le traitement
if(xmlExo.loaded ) {
gotoAndPlay(2);
} else {
gotoAndPlay(1);
}
/*----------------------------------------------------------------*/
function traiteXML(success) {
// on récupère toutes les données hiérarchisées du xml dans différents tableaux
if(success) {

aGroupe = xmlExo.firstChild.firstChild.childNodes;
i=0;
//for( i=0; i


}

Je n'arrive donc pas à faire un tableau à 3 dimension, mais je dois pouvoir m'en sortir comme ça.

Merci pour ta précieuse aide
Zitoun
Messages postés
115
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
25 mars 2008

Zitoun