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 :

ligne suivante, ligne précédente


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 236
    Par défaut ligne suivante, ligne précédente
    Bonjour,

    Je voudrais utiliser dans mon programme la ligne courante, et précédente.

    Par exemple pour mon algo :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Si (ligne_précédente = toto et ligne_suivante = tutu)
        alors blabla
        Sinon
              bloblo
    Je sais récupérer la ligne courante avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while ( my $ligne = <FICHIER> )
    if ( ( $ligne =~ toto )
    Comment faire pour la ligne précédente ?

    Merci d'avance et bonne journée

  2. #2
    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
    Une méthode (sans lire tout le fichier d'un coup) est la suivante :
    Lire les lignes dans un tableau dont on maintient en permanence 3 lignes.
    La première sera la ligne avant, la deuxième la ligne courante, la troisième, la ligne suivante (il faudra traiter les cas particulier de la fin avec undef par exemple).
    Pour traiter la ligne courante, il faudra donc toujours avoir lu la ligne suivante :

    Idée de modèle de script (non testé) :
    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
     
    sub traitement {
      my @lignes = @_;
      if ($lignes[0] =~ /toto/ && $lignes[2] =~ /tutu/) {
        # blabla
      }
      else {
        # bloblo
      }
    }
     
    push @lignes, <STDIN> foreach 1 .. 2;
    while (<STDIN>) {
      push @lignes, $_;
      unshift @lignes;
      traitement(@lignes);
    }
    Dans ce contexte, ton fichier doit contenir au moins 3 lignes, et la première et la dernière lignes ne sont pas traitées (car ne possèdent respectivement pas de ligne précédente et de ligne suivante).

    Sinon, tu peux lire tout le fichier d'un coup (s'il n'est pas gigantesque), et traiter le fichier dans le tableau :

  3. #3
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 236
    Par défaut
    Meric je me suis inspiré de ton idée pour stocker mes lignes dans mon tableau et travailler dessus :

    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
    21
    22
    # !usr/bin/perl -w
    use strict;
    use warnings;
     
    open FICHIER, '<', "test_lignes.txt" or die("E/S : $!\n");
     
    my @t = ();
    my $i = 0;
     
    while ( my $ligne = <FICHIER> ) {
    		$i++;
    		$t[$i] = $ligne;
    		print $t[$i];
     
     
    }
    # print $t[1], $t[2];
    if (( $t[1] =~ m/^toto\s*/ ) && ( $t[2] =~ m/^tutu\s*/ )){
    			print "\nOK OK OK OK OK";
    	}
     
    close FICHIER;
    Encore merci bonne soirée

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 11/05/2015, 11h46
  2. [VBA-E]Prise en compte ligne suivant condtition multiple
    Par baptbapt dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 04/08/2006, 12h05
  3. [Access] Max + 3 autres lignes suivantes
    Par Le Pharaon dans le forum Langage SQL
    Réponses: 8
    Dernier message: 28/07/2006, 14h44
  4. Comment allez vers la ligne suivante d'un dbgrid
    Par Karim1971 dans le forum Bases de données
    Réponses: 7
    Dernier message: 12/05/2006, 11h57
  5. VBA EXCEL - Sélection d'une ligne suivant saisie
    Par brethomeau dans le forum Macros et VBA Excel
    Réponses: 48
    Dernier message: 15/11/2005, 17h41

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