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 :

Boucle for avec variable [Débutant(e)]


Sujet :

Langage Perl

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Boucle for avec variable
    Bonjour,

    Je voudrai récupérer le nombre de balise d'1 fichier xml et faire une boucle for pour traiter chaque balise.
    Mon pb c'est que j'aimerai récupérer tour à tour les valeur de
    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
    17
    18
    19
    20
    DELIVERY_FILE_TITLE1, DELIVERY_FILE_TITLE2...
     
            $_=`grep DELIVERY_FILE_TITLE $xml_file | wc -l`;
            for ($i=0; $i<$_; $i++)
            {
                    if ( $F->{DELIVERY_FILE_TITLE${i}} )
                    {
                            push @args, "-ii-title \"$F->{DELIVERY_FILE_TITLE${i}}\"";
                    }
                    else
                    {
                            print LOG "[WARNING] ".localtime(time)." DELIVERY_FILE_TITLE not provided. Skipping.\n";
                            $optsfile .= ".error";
                    }
     
                    if ( $F->{DELIVERY_FILE_NAME${i}} )
                    {
                            push @args, "-ii-description \"$F->{DELIVERY_FILE_NAME}\"";
                    }
            }
    Merci pour votre aide.

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    je comprends pas trop ce que tu veux faire mais j'ai deux petites remarques:

    - si tu veux traiter des balises xml, il y a des fonctions prévues à cet effet
    (regarde ici tu trouveras sûrement ton bonheur: http://djibril.developpez.com/tutoriels/perl/perl-xml/)

    - ta commande `grep DELIVERY_FILE_TITLE $xml_file | wc -l` te renverra le nombre de lignes avec ce texte donc pas forcément le nombre que tu souhaites. exemple simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <DELIVERY_FILE_TITLE1> 
        <DELIVERY_FILE_TITLE2>
            Texte
        <\DELIVERY_FILE_TITLE2>
    <\DELIVERY_FILE_TITLE1>
    Ton grep renvoie "4" et tu risques d'avoir des problèmes lors de ton traitement car les balises DELIVERY_FILE_TITLE3 et DELIVERY_FILE_TITLE4 n'existe pas

    une solution pour ton grep serait (à tester) d'utiliser la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    `grep '<DELIVERY_FILE_TITLE' $xml_file | sort -u | wc -l`;

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Quelque précisions :
    Mon fichier xml contient des balises comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <DELIVERY_FILE_TITLE1>texte1<\DELIVERY_FILE_TITLE1>
    <DELIVERY_FILE_TITLE2>texte1<\DELIVERY_FILE_TITLE2>
    ...
    donc normalement c'est sur une seule ligne, mais le sort -u ne coute rien, merci.

    Mon but ensuite est juste de faire un for pour le nombre de balise comptée et de récupérer sa valeur en fonction de $i.

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    ok dans ce cas tu peux peut être juste faire quelque chose comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    open(FH_IN, $xml_file);
    while ( <FH_IN> ){
        if ( $_ =~ /<(DELIVERY_FILE_TITLE(\d+))>(.+)<\\DELIVERY_FILE_TITLE\d+>/ ){
            #Traitement souhaite selon ton besoin
            # la variable $1 contiendra: "DELIVERY_FILE_TITLE1", "DELIVERY_FILE_TITLE2" ou ...
            # $i de ton code sera ici $2
            # le texte entre les balises sera sous la variable $3
        }
    }
    mais ton bout de code m'a l'air d'être une sous partie d'un script alors je sais pas si cette solution sera pratique pour toi

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Bonjour et merci.
    mais effectivement ce bout de code fait parti d'un script auquel on me demande de rajouter une fonctionnalité.

    La façon dont j'essaie de procéder ne vous parait pas possible ?

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    si si c'est surement possible comme tu fais même si comme ça pas facile d'en être sûr

    par contre j'arrive pas trop à voir ce que tu attends... Ton bout de code fonctionne? si non explique ce qui ne va pas qu'on puisse t'aider

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    à l'heure actuelle, j'ai : si le tag existe dans le fichier xml, je le pousse dans @args

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if ( $F->{DELIVERY_FILE_TITLE} )
    {
              push @args, "-ii-title \"$F->{DELIVERY_FILE_TITLE}\"";
    }

    Maintenant, je vais avoir plusieurs tag possibles. Donc je veux savoir combien (grep).
    Et je veux les mettre chacun leur tour dans @args

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $_=`grep DELIVERY_FILE_TITLE $xml_file | wc -l`;
            for ($i=0; $i<$_; $i++)
            {
                    my @args = ();
                    if ( $F->{DELIVERY_FILE_TITLE${i}} )
                    {
                            push @args, "-ii-title \"$F->{DELIVERY_FILE_TITLE${i}}\"";
                    }
            }

  8. #8
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    ok par contre attention à ta numérotation car le premier élément dans les balises est DELIVERY_FILE_TITLE1 alors qu'avec ton code, tu stockeras dans ton 'array' DELIVERY_FILE_TITLE0

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

Discussions similaires

  1. boucle For avec variable variant
    Par frogs dans le forum Langage
    Réponses: 4
    Dernier message: 19/08/2011, 11h37
  2. Boucle for avec variable dans le texte
    Par Alplob dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 21/06/2011, 10h33
  3. Réponses: 2
    Dernier message: 14/04/2010, 18h39
  4. Boucle for avec SELECT et variable indicée
    Par hisin dans le forum Langage
    Réponses: 4
    Dernier message: 14/12/2009, 11h53
  5. Boucle for avec 2 variables
    Par radzar dans le forum PL/SQL
    Réponses: 8
    Dernier message: 15/05/2009, 12h07

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