Boucle et validation de données actionscript

fragger Messages postés 21 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 15 janvier 2009 - 14 janv. 2009 à 14:10
faiblard Messages postés 337 Date d'inscription samedi 3 février 2007 Statut Membre Dernière intervention 4 janvier 2011 - 15 janv. 2009 à 13:43
Bonjour à tous,

Voilà, je bloque sur ce code et je tourne en rond...
Le
script est celui d'un clip qui permet de vérifier ce qui a été saisi
par l'utilisateur en le comparant à des valeurs stockées dans un
tableau.

Au début j'utilisais des valeurs numériques et j'avais
pas besoin de tableau (et ça marchait;-)) mais je voulais laisser le
choix de saisir des décimales avec des points ou des virgules.
Trace lit bien le contenu de mes tableaux mais je ne parviens pas à faire la comparaison avec les textes saisis... Peut être que je fais fausse route avec des tableaux....
Voici le code :

on (release) {
    var v1:Array = ["400.4","400,4"];
    var v2:Array = ["411.5","411,5"];   
    var vv1:String = v1_txt.text;
    var vv2:String = v2_txt.text;
   

for(var p:String in v1)
{trace(v1[p]);  
}

for(var m:String in v2)
{trace(v2[m]);  
}
 
    if (vv1!=v1[p] || vv2!=v2[m]) {
        message_txt.text = "C'est faux. Essayez à nouveau";}
       
        else {message_txt.text = "C'est exact!";
        valid_btn._visible=false;
        suite_mc._visible=true;
        }   
   
}
Je ne trouve pas de tutoriaux spécifiques à mon problème...
Merci par avance pour votre aide

14 réponses

faiblard Messages postés 337 Date d'inscription samedi 3 février 2007 Statut Membre Dernière intervention 4 janvier 2011
14 janv. 2009 à 14:21
Bonjour,

Quand tu dis :


Au début j'utilisais des valeurs numériques et j'avais pas besoin de tableau (et ça marchait;-)) mais je voulais laisser le choix de saisir des décimales avec des points ou des virgules.

Tu es passé au tableau juste pour pouvoir rentrer des décimales? Oo
0
fragger Messages postés 21 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 15 janvier 2009
14 janv. 2009 à 14:45
Non c'était juste pour attribuer à v1 plusieurs valeurs possibles et autoriser la saisie avec point ou virgule.

Le tableau me semblait plus approprié pour stocker les différentes réponses possibles.
0
faiblard Messages postés 337 Date d'inscription samedi 3 février 2007 Statut Membre Dernière intervention 4 janvier 2011
14 janv. 2009 à 14:56
Pour commencer :

Il faut éviter au maximum de poser son scipt sur les bouton et autre objet de la scène sinon ca deviens le Bronx...

Je comprend toujours pas pourquoi tu utilise des tableau avec 2 fois la même valeur mais bon...

Nomme t'es variables avec des noms plus explicite parce que la c'est super tendu a relire...

En quoi code tu? AS2 ? AS3?...

Quand tu arrive a cette ligne la :
if (vv1!=v1[p] || vv2!=v2[m]) {

Tu prévois qu'elle a quelle valeur la variable p et la var m? Elles sont définis ou??? parce que bon c'est soit brouillon soit incomplet !
0
fragger Messages postés 21 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 15 janvier 2009
14 janv. 2009 à 15:14
Je vais déplacer mon script dans le scénario.

J'ai du zapper un truc mais ce sont 2 valeurs différentes pour moi XXX,
XX et XXX.
XX. Alors peut être que je me plante complétement.

Quoi qu'il en soit lorsqu'on arrive là :
   if (vv1!=v1[p] || vv2!=v2[m]) {


Je prévois que que p et m doivent avoir le contenu de leurs tableaux respectifs pour en comparer les valeurs à celles saisies.

C'est un vrai brouillon car c'est la première fois que je touche à ce genre de manip (boucle, tableau...)

J'avais pensé à une conversion des caractères saisis pour régler cette histoire de décimale avec point ou virgule mais je me suis dit qu'en passant sur des tableaux je pourrais réutiliser le principe sur toute sorte de saisie.
0

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

Posez votre question
faiblard Messages postés 337 Date d'inscription samedi 3 février 2007 Statut Membre Dernière intervention 4 janvier 2011
14 janv. 2009 à 15:23
(effectivement j'avais pas vu la différence entre le . et la ,)

Donc pour ton v1[p] il a la valeur de la case p de ton tableau v1...

Au passage les écriture les plus courante pour un tableau sont plutôt de type :

var myArray:Array = Array("firstElement", "secondElement", "thirdElement");

Ensuite par exemple si tu fait
trace(myArray[0]); flash t'affiche firstElement
trace(myArray[1]); flash t'affiche secondElement
...

Donc si ton p au moment de ton test n'as aucune valeur ou une valeur qui n'est pas dans le tableau ton test échoue...

A mon avis ton p est undefined...
(fais un trace p juste avant ton if pour voir ^^')
0
cs_bali_balo Messages postés 1378 Date d'inscription samedi 9 octobre 2004 Statut Membre Dernière intervention 1 novembre 2010 1
14 janv. 2009 à 15:30
Pourquoi ne pas tout convertir en Number ???

var v1:Array = [400.4,400,4];
var v2:Array = [411.5,411,5];
// on "'cast" les variables récupérées des TextField dynamiques
var vv1:Number= Number( v1_txt.text );
 var vv2:Number= Number( v2_txt.text );

Ensuite tu peux effectuer tes comparaisons tranquillement...
bali_balo....=]
0
fragger Messages postés 21 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 15 janvier 2009
14 janv. 2009 à 16:06
Je me suis servi de ce que tu m'as écrit et ça donne ça :

on (release) {
    var v1:Array = Array("400.4", "400,4");
    var v2:Array = Array("411.5", "411,5"); 
    var vv1:String = v1_txt.text;
    var vv2:String = v2_txt.text;
  

if (vv1==(v1[0]) || vv1==(v1[1]))
{
    var p:Number=1;
    trace(p);
    }
else {
        var p:Number=0;
        trace(p);
        }; 

 if (vv2==(v2[0]) || vv2==(v2[1]))
{
    var m:Number=1;
    trace(m);
    }
else {
        var m:Number=0;
        trace(m);
        }; 

 
    if (m!=1 ||p!=1) {
       
        message_txt.text = "C'est faux. Essayez à nouveau";}
      
        else {message_txt.text = "C'est exact!";
        valid_btn._visible=false;
        suite_mc._visible=true;
        }  
  
}

ça fonctionne mais je n'ai plus de boucle et je trouve mon script laborieux. En fait je n'ai pas trouvé comment comparer des valeurs saisies en lisant des tableaux...
0
fragger Messages postés 21 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 15 janvier 2009
14 janv. 2009 à 16:08
oups j'avais pas raffraichi ma page et je n'ai pas vu ton précédent message. comme tu dis : bali balo ;-)

j'essaye cette solution pour voir
0
faiblard Messages postés 337 Date d'inscription samedi 3 février 2007 Statut Membre Dernière intervention 4 janvier 2011
14 janv. 2009 à 16:18
La solution de bali balo est bonne mais je voulais que tu comprenne un peu comment marche les tableaux... :D

Tu devrais lire quelque tuto dessus tu en as besoin :D
0
fragger Messages postés 21 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 15 janvier 2009
14 janv. 2009 à 16:32
ça veut dire que mon script est tout pourri?

En fait je pense avoir compris le principe du tableau
montableau[0]
montableau[1]
montableau[2]

Mais c'est tout ce qui gravite autour et surtout la comparaison d'un élément au contenu de plusieurs tableaux... J'ai vu bcp de tutos sur la chose mais ça traite principalement du remplissage dynamique ou de la lecture du contenu.
Je tiens vraiment à comprendre car je vais en avoir souvent besoin...

Bali balo ===> le fait de caster la saisie c'est la transformer en number (123,5 devient 123.5)?
Si c'est le cas je peux faire juste une comparaison sur une valeur numérique?

petit à petit l'oiseau fait son nid
0
cs_bali_balo Messages postés 1378 Date d'inscription samedi 9 octobre 2004 Statut Membre Dernière intervention 1 novembre 2010 1
14 janv. 2009 à 16:46
En fait avant tu comparais des String entre eux. Il est plus juste que
tous ces valeurs numériques soient de type Number. Cela évite dans un
premier temps les bugs de comparaison entre les String et les bugs de
concaténation.


J'ai fait rapidement ce test :
var s:String = "403.1";
trace( Number(s) );
Cela affiche bien 403.1
Mais si je fais :
var s:String = "403,1";
trace( Number(s) );
Cela m'affiche NaN. Donc en fait si tu veux laisser la possibilité à l'utilisateur de saisir soit un "." soit un "," ou voire même un autre séparateur, il va falloir que tu traites d'abord tes String. C'est-à-dire tu regardes les String enregistrés et si tu vois que l'utilisateur a saisie un "," alors tu transformes ce "," en "."
Ensuite tu peux caster comme je te l'ai montré.

Si je ne suis pas très clair, rappel moi de façon concis et explicite ton problème, ou plutôt le résultat que tu veux obtenir.
bali_balo....=]
0
fragger Messages postés 21 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 15 janvier 2009
14 janv. 2009 à 17:04
Au début mon test ne traitait que des number et j'avais mis une condition if Nan pour guider la saisie. Or il s'est avéré que des utilisateurs saisissaient les décimales avec la virgule... Donc je me suis dit que j'allais tout mettre dans un tableau dans le but de réutiliser ce script pour d'autres éléments que des number.
 
Le résultat que je souhaite obtenir est le suivant :
- plusieurs champs de saisie qui comparent leur contenu à des tableaux respectifs contenant plusieurs réponses possibles.
- faire évoluer la chose en indiquant quels sont les champs faux.

En gros il me manque le moyen de comparer les valeurs saisies à celles des tableaux.

La conversion "," en "." est pratique mais je serai confronté au même probleme lorsque je n'aurai à traiter que des string.

Voilà tu sais tout :-) j'espere avoir été clair et concis.
0
fragger Messages postés 21 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 15 janvier 2009
15 janv. 2009 à 13:13
J'ai parcouru de nombreux tutoriaux et je suis parvenu à la solution suivante :
on (release) {
    var v1:Array = Array("400.4", "400,4");
    var v2:Array = Array("411.5", "411,5"); 
    var vv1:String = v1_txt.text;
    var vv2:String = v2_txt.text;
  

for (var i = 0;i<v1.length; i++) {    if (vv1 v1[i]&& vv2 v2[i]){
        message_txt.text = "C'est juste!";
        trace ("correct");
        trace (v1[i]);
        trace (v2[i]);
        break;

    }
 else {message_txt.text = "C'est faux!";
         trace ("faux");

        }  }

 
}

ça fonctionne mais lorsque je saisi une valeur avec le point et l'autre avec une virgule il me considère la réponse comme fausse....
Je pense que ça vient de i et qu'il faudrait que je crée une autre variable pour j mais je ne sais pas comment intégrer la chose à mon for (var i = 0;i<v1.length; i++)....

Auriez-vous une petite idée?

Par avance merci.
0
faiblard Messages postés 337 Date d'inscription samedi 3 février 2007 Statut Membre Dernière intervention 4 janvier 2011
15 janv. 2009 à 13:43
Dans l'état actuel des choses il te faudrait deux boucles for pour faire ce que tu veux...

Le plus propre reste donc ce que te suggère bali_balo de convertir ta chaine récupéré en number (avec number() ou parseFloat())
0