IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

[langage] Parcourir un tableau


Sujet :

Langage Perl

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Points : 137
    Points
    137
    Par défaut [langage] Parcourir un tableau
    Je possede en entree un fichier contenant une liste de version de systeme d'exploitation non-supportée par mon programme (qui permet de sauvegarder la conf' des routeurs Cisco de facon automatique).
    Je cherche à savoir si il existe une autre méthode pour parcourir un tableau mis à part case par case et avec foreach my $index (@liste_version).

    En fait l'algorithme est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    POUR CHAQUE ROUTEUR
                   SI la_version_est_supportée ALORS
                          traitement ...
                   SINON
                          on sort de la boucle et on passe au routeur suivant
                   FINSI
    FINPOUR
    Je cherche simplement comment faire la_version_est_supporte sachant que toutes les versions non supportées son dans un tableau.
    Merci !

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    essaie avec 'last', ça te permet de sortir de la boucle la plus proche, ce qui dans ton cas correspondrait à la boucle foreach du routeur en cours d'analyse

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Points : 137
    Points
    137
    Par défaut
    Le probleme c'est qu'ici j'ai simplifié le programme car en fait je suis dans une imbrication d'autre boucle SI et si je fais un last je sort de la premiere boucle SI, la boucle dans lequel je fais le last.
    Je ne me trompe pas last permet de sortir de la boucle dans lequel on l'appelle ?
    En fait je veux faire un GOTO prochain routeur.
    Mais je vois pas ...

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Citation Envoyé par Jibees
    Le probleme c'est qu'ici j'ai simplifié le programme car en fait je suis dans une imbrication d'autre boucle SI et si je fais un last je sort de la premiere boucle SI, la boucle dans lequel je fais le last.
    Je ne me trompe pas last permet de sortir de la boucle dans lequel on l'appelle ?
    En fait je veux faire un GOTO prochain routeur.
    Mais je vois pas ...
    pour moi, sauf erreur, last s'utilise comme dans cet exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for($i = 0; $i < 10; ++$i) {
        for($p = 0; $p < 15; ++$p) {
            if condition remplie {
                last;
            }
        }
        last attérit ici;
    }
    maintenant, vu que tu parles de GOTO ...

    si tu n'en saupoudres pas partout, tu peux éventuellement en positionner un là où tu veux ?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Points : 137
    Points
    137
    Par défaut
    Moi je pense au contraire que last atterit a la fin de la boucle dans lequel il est appelé. Mais je me trompe peut-être ...
    Cela ne résoud de toute facon pas mon probleme car en fait j'ai besoin d'aller au moin 4 ou 5 boucles en dessous !

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Citation Envoyé par Jibees
    Moi je pense au contraire que last atterit a la fin de la boucle dans lequel il est appelé. Mais je me trompe peut-être ...
    Cela ne résoud de toute facon pas mon probleme car en fait j'ai besoin d'aller au moin 4 ou 5 boucles en dessous !
    alors dans ce cas, GOTO peut résoudre ton problème, même si ça n'est pas très politically correct

    Mais pense surtout à la maintenance de ton code : si dans 6 mois, toi ou un collègue doit se pencher sur la grosse partie de boucles imbriquées et comprendre où le last attérit, le GOTO sera ici nettement mieux compris

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Points : 137
    Points
    137
    Par défaut
    Tres bien vu pour la maintenance !
    Par contre en disant GOTO je faisais une ellusion au Pascal (je crois), je ne me doutais pas que cette commande existe !
    Comment s'en sert-on ?

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Points : 137
    Points
    137
    Par défaut
    Tres bien mais connais tu quelque chose de terrible pour parcourir ce tableau qui contient ces versions non-supportées sans faire de foreach et donc faire le test (donc le if) à chaque fois ?

  9. #9
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Citation Envoyé par Jibees
    Tres bien vu pour la maintenance !
    Par contre en disant GOTO je faisais une ellusion au Pascal (je crois), je ne me doutais pas que cette commande existe !
    Comment s'en sert-on ?
    tu en sauras plus en lisant la doc de Perl

    en espérant me pas me gourrer, ça doit ressembler à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for($i = 0; $i < 10; ) { 
        for($p = 0; $p < 15; ++$p) { 
            if condition remplie { 
                goto TOTO; 
            } 
        } 
        TOTO: ++$i;
    }
    Edit : j'ai corrigé mon exemple, il donnait une boucle infinie, sorry

  10. #10
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Citation Envoyé par Jibees
    Tres bien mais connais tu quelque chose de terrible pour parcourir ce tableau qui contient ces versions non-supportées sans faire de foreach et donc faire le test (donc le if) à chaque fois ?
    désolé, j'ai rien capté à ta question

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Points : 137
    Points
    137
    Par défaut
    Pour le goto j'ai lu la doc de perl, et en effet c'est ca ! (mais ca ne me plait pas ce goto ... )

    Bon je m'explique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    label POUR CHAQUE ROUTEUR
    {
        foreach my $version (@liste_version)
       {
               if($version_du_routeur == $version) 
               { 
                # donc la version n'est pas supporté : on passe au routeur suivant
               goto label;
               }
               else
               {
                traitement ...;
                }
       }
    }
    et je voudrais remplacer ce foreach par une super fonction de la mort (à placer dans la condition SI) qui me permettrait d'éviter ce foreach !

  12. #12
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    si j'ai bien compris, @liste_version contient juste des n° de versions ?

    si oui, je passerais bien par un hash (%toto) alors !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach my $version(@liste_version) {
        $toto{$version} = 1;
    }
    et maintenant, je l'implémente dans ton programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    POUR CHAQUE ROUTEUR { 
        if (! $toto{$version_du_routeur}) {
            traitement;
        }
    }

  13. #13
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    alors Jibees, ça donne quoi ?

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Points : 137
    Points
    137
    Par défaut
    Ben en fait c'est tout simple mais je ne savais pas que ca existait : je fais tout simplement un next (et non pas un last) vers le foreach (cela me permet de ne pas recommencer à zero)....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    routeur POUR chaque_routeur_dans_la_liste FAIRE
         traitement ....
         SI routeur_non_présent FAIRE
         next routeur;
         SI version_non_supportée FAIRE
         next routeur;
         traitement ...
    FINPOUR

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. parcourir un tableau aléatoirement
    Par khayyam90 dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 01/12/2004, 13h44
  2. [langage] Parcourir une list de array
    Par nledez dans le forum Langage
    Réponses: 4
    Dernier message: 08/11/2004, 17h11
  3. Réponses: 5
    Dernier message: 21/07/2004, 19h34
  4. [langage] tri dans tableau de hachage
    Par mimilou dans le forum Langage
    Réponses: 2
    Dernier message: 10/03/2004, 16h10
  5. [langage] Réinitialiser un tableau associatif.
    Par totox17 dans le forum Langage
    Réponses: 2
    Dernier message: 28/01/2003, 16h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo