Boucle While imbriquées.

Résolu
Signaler
Messages postés
290
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
29 février 2008
-
Messages postés
290
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
29 février 2008
-
Un probleme survient lors de l imbriquation de boucle while.
Au lieu de faire boucle1*boucle2 instructions, il se produit boucle1+boucle2 instructions.

Je vous fait part de mon code, j' espere que vous pourrez m aider car cette fonction est essentielle ds mon addon.

alias findposinalltble { 
  var %i 1
  var %nametble $3
  set %position $1 $2
  var %maxposition $calc( $gettok(%position,1,32) + 24*4 ) $calc( $gettok( %position,2,32) + 34*4 )
  hmake -s daoc.temp $+ nametble $hget(daoc.name.joueurs).size
  while ( %position <= %maxposition ) {
    while ( %i <= $hget(daoc.name.joueurs).size ) { 
      echo -a %i
      if ( $hget($hget(daoc.name.joueurs,%i).item,3).data == %position ) {
        msg $4 $hget($hget(daoc.name.joueurs,%i).item,3).data
        hadd -s daoc.temp $+ %nametble $hget(daoc.name.joueurs,%i).item $gettok(%position,1,32) $+ , $+ $gettok(%position,2,32) 
      }   
      inc %i
    }
;echo pour le debug
    echo -a %position / %maxposition (boucle position)
;incrémentation de %position
    set %position $calc( $gettok( %position,1,32) + 24 ) $calc( $gettok(%position,2,32) + 34 )
  }
  hfree -s daoc.temp $+ %nametble
  unset %position
}

6 réponses

Messages postés
708
Date d'inscription
lundi 15 juillet 2002
Statut
Membre
Dernière intervention
17 mars 2005

j'ai trouvé l'erreur regarde le code :

alias findposinalltble {
var %i 1
var %nametble $3
set %position $1 $2
var %maxposition $calc( $gettok(%position,1,32) + 24*4 ) $calc( $gettok( %position,2,32) + 34*4 )
hmake -s daoc.temp $+ nametble $hget(daoc.name.joueurs).size
while ( %position <= %maxposition ) {
;voila l'erreur :)
var %i 1
;tu as oublié ce petit var %i 1
while ( %i <= $hget(daoc.name.joueurs).size ) {
echo -a %i
if ( $hget($hget(daoc.name.joueurs,%i).item,3).data == %position ) {
msg $4 $hget($hget(daoc.name.joueurs,%i).item,3).data
hadd -s daoc.temp $+ %nametble $hget(daoc.name.joueurs,%i).item $gettok(%position,1,32) $+ , $+ $gettok(%position,2,32)
}
inc %i
}
;echo pour le debug
echo -a %position / %maxposition (boucle position)
;incrémentation de %position
set %position $calc( $gettok( %position,1,32) + 24 ) $calc( $gettok(%position,2,32) + 34 )
}
hfree -s daoc.temp $+ %nametble
unset %position
}

j'ai trouvé ton problème il fallait mettre var %i 1 entre la premiere et la deuxieme boucle
c pour ça que la premiere boucle ne fonctionne qu'une seule fois
maintenant ça devrait marcher.
Messages postés
708
Date d'inscription
lundi 15 juillet 2002
Statut
Membre
Dernière intervention
17 mars 2005

Dis Huitre ... je pourrais savoir si ça marche ? j'ai pas de réponse c pas cool ...
Messages postés
290
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
29 février 2008

Dsl kerrigan je ne suis pas chez moi depuis le post , je te dis demain soir si ca marche.
Messages postés
290
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
29 février 2008

Voila nickel ca marche, merci kerrigan ;)

Je ne pensais pas que les variables étaient autant locale que ça ^^
Messages postés
708
Date d'inscription
lundi 15 juillet 2002
Statut
Membre
Dernière intervention
17 mars 2005

lol haaaaaaaaaaaaa je suis content que ça marche.

et oui ça tu les variables locales lol c rapide puissant et très locale quel pied :)
Messages postés
290
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
29 février 2008

merci de ton aide petit(e)? Kerrigan =)