[PERL]-Problème "for if elsif" en menu

Résolu/Fermé
blux Messages postés 26450 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 6 novembre 2024 - 8 déc. 2006 à 10:57
blux Messages postés 26450 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 6 novembre 2024 - 8 déc. 2006 à 12:45
Bonjour,

j'ai créé une petite structure de menu en PERL, mais j'ai un souci lors de la saisie d'un choix avec 2 chiffres, il ne me prend que le dernier et va donc au menu correspondant, pas à celui que je voudrais (ex : je saisis 98, il va au choix 8, 97 ->7)

Une explication/correction ?

Merci d'avance.
while ($SAISIE != 99)
{
    print "\t\t\t\tPool en cours : ".$TAB_POOL[$SAISIE_POOL][0]."\n";
    print "\t\tProchains jours ouvrés : ".$JO1D." ".$JO1J."/".$JO1M."/".$JO1A." et ".$JO2D." ".$JO2J."/".$JO2M."/".$JO2A."\n";
    print " 1 - \n";
    print " 2 - \n";
    print " 3 - \n";
    print " 4 - \n";
    print " 5 - \n";
    print " 6 - \n";
    print " 7 - \n";
    print " 8 - \n";
    print "99 - Sortie\n";
    print "\nVotre choix -> ";
    $SAISIE = <STDIN>;
    chomp($SAISIE);
    print "#".$SAISIE."#\n";
    for ($SAISIE)
    {
        if (/1/)
        {
                print $I."-".$TAB_POOL[$I][0]."\t";
        }
        elsif (/2/)
        {
            ListeCart();
        }
        elsif (/3/)
        {
            # $IG est l'indice à partir duquel commencent les noms de groupes dans le tableau
            $I = $IG;
        }
        elsif (/4/)
        {
            print "Constitution de la liste des cartouches\n";
        }
        elsif (/5/)
        {
            print "Marche pôô!\n";
        }
        elsif (/6/)
        {
            $I = $IG;
            print "\n";
        }
        elsif (/7/)
        {
            for $I (0..$NB_ELEM-1)
            {
                print $LIST."\n";
            }
        }
        elsif (/8/)
        {
            for $I (0..$NB_ELEM-1)
            {
                print $LIST."\n";
            }
        }
        elsif (/98/)
        {
            print "Forçage\n";
        }
        elsif (/99/)
        {
            die "Fin\n";
        }
    }
}
A voir également:

2 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
8 déc. 2006 à 11:20
Salut,

il ne me prend que le dernier et va donc au menu correspondant, pas à celui que je voudrais (ex : je saisis 98, il va au choix 8, 97 ->7)

Puisqu'il trouve d'abord /7/ ou /8/
for ($SAISIE)

for est équivalent avec foreach et on l'utilise pour les tableau

for(@chaque_element)
foreach(@chaque_element)

Aussi pour les imbrications. C'est laide avec autant des if...elsif..
Tu peux faire comme ça
while ($SAISIE != 99){
    print "\t\t\t\tPool en cours : ".$TAB_POOL[$SAISIE_POOL][0]."\n";
    print "\t\tProchains jours ouvrés : ".$JO1D." ".$JO1J."/".$JO1M."/".$JO1A." et ".$JO2D." ".$JO2J."/".$JO2M."/".$JO2A."\n";
    print " 1 - \n";
    print " 2 - \n";
    print " 3 - \n";
    print " 4 - \n";
    print " 5 - \n";
    print " 6 - \n";
    print " 7 - \n";
    print " 8 - \n";
    print "99 - Sortie\n";
    print "\nVotre choix -> ";
    $SAISIE = <STDIN>;
    chomp($SAISIE);
    print "#".$SAISIE."#\n";


SWITCH:{
  if ($SAISIE =~/1/) {print $I."-".$TAB_POOL[$I][0]."\t"         ;last SWITCH}
  if ($SAISIE =~/2/) {ListeCart()                                ;last SWITCH}
  if ($SAISIE =~/3/) {$I = $IG                                   ;last SWITCH}
  if ($SAISIE =~/4/) {print "Constitution liste des cartouches\n";last SWITCH}
  if ($SAISIE =~/5/) {print "Marche pôô!\n"                      ;last SWITCH}
  if ($SAISIE =~/6/) {$I = $IG;print "\n"                        ;last SWITCH}

  if ($SAISIE =~/7/) {  for $I (0..$NB_ELEM-1){
                          print $LIST."\n";
                        }                                        ;last SWITCH}
        
  if ($SAISIE =~/8/) {  for $I (0..$NB_ELEM-1){
                          print $LIST."\n";
                        }                                        ;last SWITCH}

  if ($SAISIE =~/98/) {print "Forçage\n"                         ;last SWITCH}
  if ($SAISIE =~/99/) {die "Fin\n"                               ;last SWITCH}
 }
}
En revanche, depuis Perl 5.8 pour obtenir les instructions switch et case
use Switch;
0
blux Messages postés 26450 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 6 novembre 2024 3 312
8 déc. 2006 à 11:30
Je sais pas quoi faire...

Pour les instructions 'switch case', y'a des soucis, car il évalue le code et comme j'ai des / non pairés, ça m$*$~#...

https://linuxfr.org/forums/programmation-perl/posts/switch-en-perl-58-qui-veut-pas-compiler (dernier message)

C'est pour ça que j'ai cherché une solution de secours...
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
8 déc. 2006 à 11:36
alors mets comme ça

/^1$/

.
.
/^99$/

si tu mets /7/ quand tu tapes 97 le motif correspond donc tu ne vas jamais exectuer le menu 97
0
blux Messages postés 26450 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 6 novembre 2024 3 312
8 déc. 2006 à 12:45
Nickel, ça marche !

Merci...
0