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 :

Arreter la lecture du fichier


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 Arreter la lecture du fichier
    Bonjour,

    Je cherche a arreter la lecture de mon fichier quand je recontre un motif précis.

    Est ce que ceci est correct :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    while ( my $ligne = <FICHIER>) {
    	if ($ligne =~ m/^\tMonMotif/ .. defined $ligne) {
    		...
    		...
    		...
    		...
    		last
    	}
    }
    Ou bien avait vous une solution ?

  2. #2
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 184
    Par défaut
    Utilise l'instruction last.

  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
    J'ai testé avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	if ($trouve) {
    		if ($ligne=~/\t{2}Application Actions/) {last;} 
    			if ( $ligne =~ m/\t*Function:\s*(.+)/ ){
    				print $cpt, "\t";
    			}
    		}
    	if ($ligne=~/Application Description:/) {$trouve=1;}
    mais il ne s'arrete pas !!

    Je voudrais débuter la lecture dès le debut du fichier (qui commence par "Application Description:" ) et j'arreter dès que je rencontre "Application Actions" afin de récupérer mes Function:

  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
    Tout dépend s'il existe plusieurs boucles imbriquées, auquel cas, last s'applique seulement à la dernière imbrication.
    Pour préciser la boucle à terminer, il faut la labelliser (ou utiliser un indicateur de fin) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    FICHIER: while (<STDIN>) {
       if (/fin/) {
          last FICHIER;
       }
    }
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while (!$fini && (my $line = <STDIN>)) {
       if ($line =~ /fin/) {
          $fini = 1;
       }
    }

  5. #5
    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
    merci mais j'y arrive pas...

    voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if ( $ligne =~ m/\t*Function:\s*(.+)/ && $fini !=1) {
     
    		if ($ligne=~/\t{2}Application Actions/) {
    			$fini = 1;
    		}
    		else{
    		print $cpt, "\t";
    		}
    	}
    comme ça non plus ça ne marche pas :s

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	my $fini = 0;
     
     
    if ($ligne=~/\t{2}Application Actions/) {
    		$fini = 1;
    	}
     
    	if ( $ligne =~ m/\t*Function:\s*(.+)/ && $fini == 0) {
    		print $cpt, "\t";
    	}
    tu as une idée ?

  6. #6
    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
    Oups... désolé, j'avais corrigé dans mon script réel, mais j'ai oublié de mettre à jour le message... il faut inverser les conditions dans le while.
    J'ai corrigé le post de 11h51 !
    Désolé.

  7. #7
    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
    Voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if ( $fini == 0 && $ligne =~ m/\t*Function:\s*(.+)/) {
    		if ($ligne=~/\t{2}Application Actions/) {
    		$fini = 1;
    		}
    		if ($fini == 0){
    		print $cpt, "\t";
    		}
    	}
    Ca ne marche tjs pas, je parcours l'intégralité du fichier.
    Alors que pour moi mon code dit :

    Si fini = 0 et que ma ligne = Function
    alors si ma ligne = Application Actions alors fini = 1
    sinon si fini = 0 alors je print ma ligne.

    Mon programme me print tt les lignes de mon code qui commence par Functions au lieu de s'arreter quand il rencontre Application Action

    une idée?

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

Discussions similaires

  1. [Windows]lecture des fichier lnk (raccourcis)
    Par Tiaps dans le forum API standards et tierces
    Réponses: 10
    Dernier message: 21/10/2009, 19h27
  2. [jsp]lecture de fichier
    Par antigone dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 04/09/2003, 11h05
  3. [AS400][Intranet][PC] Lecture de "fichiers" AS400
    Par lando dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 16/07/2003, 11h11
  4. Lecture de fichier
    Par Watcha dans le forum x86 16-bits
    Réponses: 13
    Dernier message: 04/03/2003, 20h43
  5. Lecture de fichiers ".WAV"...
    Par 0x4e84 dans le forum Langage
    Réponses: 2
    Dernier message: 03/09/2002, 09h43

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