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 :

Comment mettre a jour la condition d'une boucle?


Sujet :

Langage Perl

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 15
    Points : 7
    Points
    7
    Par défaut Comment mettre a jour la condition d'une boucle?
    Bonjour tt le monde,

    voila mon probleme, j'ai une boucle du type:
    foreach $i (sort keys %hash) {
    ...
    }

    Mon tableau associatif peut etre modifie a l'interieur de ma boucle mais cette modification n'est pas prise en compte ds la condition de ma boucle...seulement a l'interieur...

    Comment me sortir de cette impasse???

  2. #2
    lvr
    lvr est déconnecté
    Membre extrêmement actif Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    909
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 909
    Points : 1 360
    Points
    1 360
    Par défaut
    C'est quoi les modifications dont tu parles ? Des ajoutes ?
    Si c'est le cas tu peux faire de l'itératif par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    foreach $i (sort keys %hash) {
         &Traiter($i);
    }
     
     
    sub Traiter() {
       my($i)=$_[0];
       ...
       $hash{$new_key}=$new_value;
       &Traiter($new_key);
       }

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    En fait mes modif st l'ajout de couple(s) cle-valeur.
    Mais je ne comprends pas tres bien les modifications que tu me proposes..??

  4. #4
    lvr
    lvr est déconnecté
    Membre extrêmement actif Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    909
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 909
    Points : 1 360
    Points
    1 360
    Par défaut
    Ce que je fais c'est traiter chaque itération de manière itérative.
    Si le traitement d'une clé amène à créer une nouvelle entrée dans le tableau, alors je réappelle la fonction de traitement sur cette valeur.

    Ce que je pense qu'il se passe, c'est que la fonction "keys %hash" construit snapshot des clés de ta %hash sous la forme d'une array et c'est pour ça que ta boucle ne prend pas en compte les nouvelles clés.

    Avec mon système, c'est toi qui force le traitement des nouvelles valeurs et réappellant le traitement pour chaque nouvelle valeur. Et si le traitement de la nouvelle valeur crée également une nouvelle valeur, la fonction appellera également le traitement pour cette nouvelle valeur. De cette manière tu es sûr de bien traiter toutes tes valeurs.

  5. #5
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Je vois ce que tu veux dire...ok. Ca me parait etre une bonne solution.

    Maintenant, le pb est que j'ai bcp de code ds cette boucle et dc ca va engendrer bcp de modif... ca reste raisonnable, soit, mais si je pouvais m'eviter tt ca...

    Dc, question, n'y a-t-il pas une autre solution???
    Mais je garde ton idee pas loin de moi...

  6. #6
    lvr
    lvr est déconnecté
    Membre extrêmement actif Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    909
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 909
    Points : 1 360
    Points
    1 360
    Par défaut
    Autre idée: ne pas un foreach mais un for classique avec une array dont tu contrôles le contenu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    my(@keys)=keys %hash;
    for($idx=0;$idx<$#keys;$idx++) {
        ....
        # J'ajoute une nouvelle entrée dans ma hash, je copie la nouvelle clé dans 
        # mon array de clés
        $hash{$newkey}=$newvalue;
        $keys[$#keys]=$newkeys;
        }
    Comme ça tu contrôles le contenu du tableau sur lequel tu boucles et la condition de fin de boucle dépend de la taille du tableau et recalculée à chaque boucle.

  7. #7
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Merci beacoup Ivr!!!

    J'ai essaye tes deux methodes, et la premiere m'a pose qq pb, en revanche, ap qq modifications, la deuxieme resoud mon pb!!!

    Dc merci beaucoup pr ton aide!!!


    Peut etre a bientot!

    Ciao

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

Discussions similaires

  1. Comment mettre a jour une des Entities contenant dans seul model
    Par jérémyp8 dans le forum ASP.NET MVC
    Réponses: 2
    Dernier message: 09/01/2015, 10h17
  2. Réponses: 10
    Dernier message: 25/06/2008, 13h54
  3. Réponses: 2
    Dernier message: 02/05/2006, 09h50
  4. Comment mettre des lignes de couleur dans une TCheckListBox ?
    Par Isa31 dans le forum Composants VCL
    Réponses: 9
    Dernier message: 31/03/2005, 08h40
  5. Mettre a jour les Parametres dans une requete SQL
    Par Tartar Ukid dans le forum C++Builder
    Réponses: 7
    Dernier message: 31/03/2004, 13h51

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