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 :

Lecture de plusieurs lignes dans un fichier


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 624
    Par défaut Lecture de plusieurs lignes dans un fichier
    Bonjour,

    je parse un fichier, et j'affiche certaines lignes en fonction de différentes expressions régulières.
    Dans un cas particulier, je voudrais afficher la ligne courante, ainsi que les 9 lignes suivantes.

    J'ai essayé d'include un while sur <FILEH> dans le traitement, mais ça m'affiche en boucle la ligne qui active cond3. Pareil avec un for où j'avais mis <FILEH> dans mon incrément.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while(<FILEH>) {
       if(cond1) { ... }
       if(cond2) { ... }
       if(cond3) {
          # afficher la ligne courante et les 9 suivantes
          # traitement
       }
    }
    Y a t'il une méthode pour faire ça dans le if ?
    Sur un autre fichier, j'ai fait comme suit, avec un compteur pour remettre affich à 0 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while(<FILEH>){
       if(cond1){ $affich=1; $cpt=0}
       if($affich==1) { print $_; $cpt++}
       if($cpt==10){ $cpt=0; $affich=0 }
    }
    Mais je me demande si il n'est pas possible de faire autrement, je voudrais éviter la multiplication des if pour faciliter la relecture.

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Quelque chose comme cela:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if(cond3) {
         print; # imprime la ligne courante
         foreach (1..9) {
              my $line = <FILEH>;
              print $line;
         }
         # ...
    Il est possible qu'une syntaxe plus concise fonctionne, mais là je ne peux pas tester:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(cond3) {
         print;
         <FILEH> and print foreach (1..9)
         # ...
    Le truc c'est que je ne suis pas sûr qu'il n'y ait pas de téléscopage entre les deux utilisations de $_.

  3. #3
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    Il est possible qu'une syntaxe plus concise fonctionne, mais là je ne peux pas tester:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(cond3) {
         print;
         <FILEH> and print foreach (1..9)
         # ...
    Le truc c'est que je ne suis pas sûr qu'il n'y ait pas de téléscopage entre les deux utilisations de $_.
    Bon, je viens de tester, cette syntaxe plus concise ne fonctione pas, il y a effectivement téléscopage des deux utilisations de $_.

    En revanche, tu peux faire comme cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while (<FILE>) {
    	if (cond3) {
    		print;
    		$line = <FILE> and print $line foreach (1..9);
    	}
    	# ...
    }
    Et là, ça marche.

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while (<FILE>) {
    	if (cond3) {
    		print;
    		$line = <FILE> and print $line foreach (1..9);
    	}
    	# ...
    }
    Plus concis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while (<FILE>) {
    	if (cond3) {
    		print;
                    print scalar(<FILE>) foreach 1 .. 9;
    	}
    	# ...
    }

  5. #5
    Membre expérimenté Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 624
    Par défaut
    Merci

  6. #6
    Rédactrice

    Avatar de stoyak
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    408
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 408
    Par défaut
    Bonjour,

    Il faut garder en mémoire le numéro de ligne qui respecte ta condition particulière et ainsi, tu pourras afficher les neuf lignes suivantes.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    my $fin;
    while(<FILEH>) {
       if(cond1) { ... }
       if(cond2) { ... }
       if(cond3) {
         $fin = $. + 9; 
         # afficher la ligne courante et les 9 suivantes
          # traitement
       }
       if ( defined $fin and $. < $fin )  { ... }
     
    }

  7. #7
    Membre expérimenté Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 624
    Par défaut
    J'ai un peu mal expliqué, vu que j'affiche les 9 lignes suivantes, je n'ai pas besoin de tester ces 9 lignes, vu qu'elles sont déjà dans le fichier résultat.

    Vu qu'elles sont déjà affichées dans les résultat, je veux qu'elles ne soient pas testées.

  8. #8
    Membre émérite Avatar de messinese
    Homme Profil pro
    IT Security Consultant
    Inscrit en
    Septembre 2007
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IT Security Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 429
    Par défaut
    Salut,


    As-tu essayé de voir avec un label, un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while($filehandle){
        LABEL:
            Traitement....
        <code>
     
       </code>
    next LABEL if ( cond3);
    }

  9. #9
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ManusDei Voir le message
    J'ai un peu mal expliqué, vu que j'affiche les 9 lignes suivantes, je n'ai pas besoin de tester ces 9 lignes, vu qu'elles sont déjà dans le fichier résultat.

    Vu qu'elles sont déjà affichées dans les résultat, je veux qu'elles ne soient pas testées.
    Les solutions que je t'ai proposées (et la version modifiée de Philou) ne testent pas ces 9 lignes, elles ne font que les imprimer.

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

Discussions similaires

  1. Recupération de plusieurs lignes dans un fichier
    Par oliviernouhi dans le forum Langage
    Réponses: 14
    Dernier message: 11/01/2011, 16h57
  2. Réponses: 3
    Dernier message: 15/06/2009, 10h43
  3. Ecrire plusieurs lignes dans un fichier texte
    Par kinon dans le forum ASP.NET
    Réponses: 5
    Dernier message: 05/02/2009, 15h07
  4. Réponses: 1
    Dernier message: 26/09/2007, 19h55
  5. écrire sur plusieurs lignes dans un fichier
    Par kenny49 dans le forum Langage
    Réponses: 3
    Dernier message: 06/04/2007, 11h47

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