[ AS3 / XML ] incrémentation dans un for each

vedelvetsyn Messages postés 45 Date d'inscription lundi 15 mars 2010 Statut Membre Dernière intervention 22 avril 2010 - 25 mars 2010 à 20:24
vedelvetsyn Messages postés 45 Date d'inscription lundi 15 mars 2010 Statut Membre Dernière intervention 22 avril 2010 - 26 mars 2010 à 13:40
Bonjour ^^

Encore une question sur l'AS3 ... en ce moment j'arrete pas :-)

je voulais savoir s'il était possible dans une commande "for each" de créer un compteur d'auto-incrémentation de type "i=0;i<x;i++"
Je voudrai utiliser un système comme ceci pour hiérarchiser des données provenant d'une base XML dans un array.

Merci d'avance :-)

promis, un jour, je vous aide à mon tour :-D
.. bah ouai, faut que ca tourne ^^

merci :-)

6 réponses

pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
25 mars 2010 à 21:10
bonjour,

Pourquoi un "for each" ? le "for" seul est justement prévu pour ...

Peg'
0
vedelvetsyn Messages postés 45 Date d'inscription lundi 15 mars 2010 Statut Membre Dernière intervention 22 avril 2010
26 mars 2010 à 03:07
ben en fait, j'ai ça :

<?xml version="1.0" encoding="utf-8"?>  
<effectif>

<num>01</num>
<nom>Joel</nom>




<num>02</num>
<nom>Steeve</nom>




<num>03</num>
<nom>Marie</nom>



</effectif>


et j'essaye de trouver un moyen pour ranger chaque donnée dans un tableau pour au final avoir chaque donnée accessible comme ceci :
pour récup une donnée >>> tabGlobal[a][b]
par exemple :
pour récup le nom Marie >>> tabGlobal[3][2]

Du coup, je cherche a numéroter chaque donnée .. et je vois pas trop comment faire...

j'avais commencé comme ça :


var chargeur:URLLoader = new URLLoader();
var fichier:URLRequest = new URLRequest("listing.xml");
chargeur.addEventListener( Event.COMPLETE, chargementComplet );
chargeur.load( fichier );

var listing:XML = new XML( pEvt.target.data );
var listPers:XMLList = listing.elements();

for each(var pers:XML in listPers) {
     var leNum[i]:String = pers.num;
     var leNom[i]:String = pers.nom;
}



Mais bon, ca ne marche pas, évidement
Mais en me relisant, je commence à me demander si je ne pars pas dans une mauvaise direction...
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
26 mars 2010 à 10:04
pourquoi vouloir créer un tableau ?

Tu as toutes tes données déjà dispo sous cette forme :

monXML.pers[n].num et monXML.pers[n].nom

Pourquoi se compliquer la vie ?

Peg'
0
vedelvetsyn Messages postés 45 Date d'inscription lundi 15 mars 2010 Statut Membre Dernière intervention 22 avril 2010
26 mars 2010 à 12:43
le but final est d'obtenir un bouton clicable qui affichera un menu déroulant composé d'autant de boutons que d'entrées "pers" dans mon fichier XML.
Et sur chaque bouton il y aurait le num et le nom d'affiché.

Pas évident tout ça, je m'attaque peut être à du lourd dès le début.

Je te montre tout le code, tu va comprendre ^^

// pour le dep
btDep.addEventListener(MouseEvent.CLICK, deplier);

// def de "deplier"
function deplier(evt:Event) {

// Chargeur pour mon fichier XML
var chargeur:URLLoader = new URLLoader();
// Objet URLRequest qui contient l'url du fichier XML:
var fichier:URLRequest = new URLRequest("listing.xml");
// chargement terminé du fichier xml
chargeur.addEventListener( Event.COMPLETE, chargementComplet );
chargeur.load( fichier );

// def de la fonction "chargementComplet"
function chargementComplet(pEvt:Event):void {
var listing:XML = new XML( pEvt.target.data );
//le document XML est constitué d'une liste d'éléments XML, en l'occurence ici, une liste de personnes
var listPers:XMLList = listing.elements();

var i:Number;
for each(var pers:XML in listPers) {

// création des textes du bouton
var normal:TextField = new TextField();
var survol:TextField = new TextField();
var clic:TextField = new TextField();

// Le bouton aura pour label la variable txtPers
var txtPers:String = listing.pers[i].num + listing.pers[i].nom
normal.text survol.text clic.text = txtPers;
trace (txtPers);

// Le texte du survol sera de couleur rouge
survol.textColor = 0xFF0000;
// Le texte du clic sera de couleur bleue
clic.textColor = 0x0000FF;
// création de l'instance du bouton
var monBouton:SimpleButton = new SimpleButton(normal, survol, clic, normal);
// affichage du bouton
addChild(monBouton);			
}
}
}



Je pense que mon problème se situe dans la boucle "for each" au niveau de l'utilisation du [i] qui ne s'incrémente pas à chaque fois...
J'ai juste ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vedelvetsyn Messages postés 45 Date d'inscription lundi 15 mars 2010 Statut Membre Dernière intervention 22 avril 2010
26 mars 2010 à 13:24
bon, je pense que le for each est effectivement une erreur dans ce cas ...

oublions le, je viens de faire avec un for, qui je pense fonctionne mieux... enfin.. c'est un début

// pour le dep
btDep.addEventListener(MouseEvent.CLICK, deplier);

// def de "deplier"
function deplier(evt:Event) {

// Chargeur pour mon fichier XML
var chargeur:URLLoader = new URLLoader();
// Objet URLRequest qui contient l'url du fichier XML:
var fichier:URLRequest = new URLRequest("listing.xml");
// chargement terminé du fichier xml
chargeur.addEventListener( Event.COMPLETE, chargementComplet );
chargeur.load( fichier );

// def de la fonction "chargementComplet"
function chargementComplet(pEvt:Event):void {
var listing:XML = new XML( pEvt.target.data );
//le document XML est constitué d'une liste d'éléments XML, en l'occurence ici, une liste de personnes
var listPers:XMLList = listing.elements();

//je compte le nombre d'entrée dans ma base XML
var nEnt:Number = listing.children().length();

var i:Number;
for (i = 0; i < nEnt; i++) {
// création des textes du bouton
var normal:TextField = new TextField();
var survol:TextField = new TextField();
var clic:TextField = new TextField();

// Le bouton aura pour label la variable txtPers
var txtPers:String = listing.pers[i].num + listing.pers[i].nom;
normal.text survol.text clic.text = txtPers;
trace (txtPers);

// Le texte du survol sera de couleur rouge
survol.textColor = 0xFF0000;
// Le texte du clic sera de couleur bleue
clic.textColor = 0x0000FF;
// création de l'instance du bouton
var monBouton:SimpleButton = new SimpleButton(normal, survol, clic, normal);
// affichage du bouton
addChild(monBouton);			
}
}
}
0
vedelvetsyn Messages postés 45 Date d'inscription lundi 15 mars 2010 Statut Membre Dernière intervention 22 avril 2010
26 mars 2010 à 13:40
YAAAAAA :-D

A force de retourner le probleme, j'ai finit par y arriver...
Enfin, c'est pas encore vraiment ce que j'attend, mais bon, ça prend forme :

// pour le dep
btDep.addEventListener(MouseEvent.CLICK, deplier);

// def de "deplier"
function deplier(evt:Event) {

// Chargeur pour mon fichier XML
var chargeur:URLLoader = new URLLoader();
// Objet URLRequest qui contient l'url du fichier XML:
var fichier:URLRequest = new URLRequest("listing.xml");
// chargement terminé du fichier xml
chargeur.addEventListener( Event.COMPLETE, chargementComplet );
chargeur.load( fichier );

// def de la fonction "chargementComplet"
function chargementComplet(pEvt:Event):void {
var listing:XML = new XML( pEvt.target.data );
//le document XML est constitué d'une liste d'éléments XML, en l'occurence ici, une liste de personnes
var listPers:XMLList = listing.elements();

//je compte le nombre d'entrée dans ma base XML
var nEnt:Number = listing.children().length();

var i:Number;
for (i = 0; i < nEnt; i++) {
// création des textes du bouton
var normal:TextField = new TextField();
var survol:TextField = new TextField();
var clic:TextField = new TextField();

// Le bouton aura pour label la variable txtPers
var txtPers:String = listing.pers[i].num + " - " +listing.pers[i].nom;
normal.text survol.text clic.text = txtPers;

// Le texte du survol sera de couleur rouge
survol.textColor = 0xFF0000;
// Le texte du clic sera de couleur bleue
clic.textColor = 0x0000FF;
// création de l'instance du bouton
var monBouton:SimpleButton = new SimpleButton(normal, survol, clic, normal);

// création le la dynamique de positionnement des bouton
var baseY:Number = 100 ;
var baseZ:Number = 0.2 * baseY * i ;
trace (baseZ);
var nouvY:Number = baseY + baseZ ;
monBouton.x = 100 ;
monBouton.y = nouvY ;

// affichage du bouton
addChild(monBouton);
}
}
}



Merci Peg' pour ton aiguillage ...
Mais ne te crois pas sortit d'affaire..
je reviendrai avec d'autres questions...
mouahahahaaa
0
Rejoignez-nous