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 :

recupérer plusieurs ligne d'un fichier


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 624
    Points : 69
    Points
    69
    Par défaut recupérer plusieurs ligne d'un fichier
    Bonjour,

    J'ouvre un fichier et je souhaiterai récupérer les lignes qui contiennent le mot "export=" et "jour=".

    Le but est de récupérer ces lignes pour récupérer la valeur derriére le "=" et afficher la ligne + cette valeur.

    exemple de ligne :
    toto
    le fichier d'export=7
    tata
    la mise à jour=8
    toto

    voici mon script , mais il m'affiche en permanence la premiére ligne


    use File::Basename;
    use File::Copy;
    use MIME::Lite;
    use Cwd;
    use POSIX 'strftime';
    use strict;
    use warnings;

    my $DirLogMDP = "C:/logs" ;
    my $FicLog = "toto.log" ;
    my $Ligne1Export="export=";
    my $Ligne2Export="jour=";
    my $Ligne;
    my $anomalies1="";
    my $anomalies2="";

    open (FIC, "<${DirLogMDP}/${FicLog}") || die "Ouverture impossible du fichier ${FicLog} : $!";

    while ($Ligne = <FIC> )
    {
    if (grep { $Ligne =~ m/$_/g } $Ligne1Export || grep { $Ligne =~ m/$_/g } $Ligne2Export)
    {
    my ($envoi1, $anomalies1) = $Ligne =~ /(\d+).+(\d+)/;
    my ($envoi2, $anomalies2) = $Ligne =~ /(\d+).+(\d+)/;
    print "$Ligne\n";
    print "$anomalies1\n";
    print "$Ligne\n";
    print "$anomalies2\n";

    }
    }
    close (FIC);

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 427
    Points : 459
    Points
    459
    Par défaut
    grep doit s'utiliser sur une liste

    au lieu de

    if (grep { $Ligne =~ m/$_/g } $Ligne1Export || grep { $Ligne =~ m/$_/g } $Ligne2Export)

    tu dois ecrire

    if ($Ligne =~ /$Ligne1Export|Ligne2Export/)


    mais en utilisant grep comme il faut tu peux faire tout ce traitement en deux ou trois lignes
    Recherche staigiaire(s) motivé(s) sur projet perl/reseau a grande echelle. Me contacter par mp.

  3. #3
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 624
    Points : 69
    Points
    69
    Par défaut
    en fait, dans mon fichier, je veux récupérer le dernier export= et le dernier jour=. A partir de celui ci j'affiche les lignes le fichier d'export=10, la mise à jour=10 et je compare si les valeurs sont égaux.


    tata
    toto
    le fichier d'export=7
    la mise à jour=8
    tata
    le fichier d'export=10
    la mise à jour=10
    itit
    lulu

    voici mon script :

    use File::Basename;
    use File::Copy;
    use MIME::Lite;
    use Cwd;
    use POSIX 'strftime';
    use strict;
    use warnings;



    my $DirLog = "C:/logs" ;
    my $FicLog = "toto.log" ;

    my @LigneExport=("fichier d'export=", "mise à jour=");
    my $NbFlux="";



    open (FIC, "<${DirLog}/${FicLog}") || die "Ouverture impossible du fichier ${FicLog} : $!";

    while ($Ligne = <FIC> )
    {

    if (grep { $Ligne =~ m/$_/g } @LigneExport)
    {
    my ($export, $NbFlux) = $Ligne =~ /(\d+).+(\d+)/;

    print "$Ligne\n";
    print "$NbFlux\n";

    }


    }
    close (FIC);
    merci pour le coup de de main

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 427
    Points : 459
    Points
    459
    Par défaut
    je persiste à dire que ton grep, meme si il est un peux mieux utiliser que dans ton premier script, ne sert à rien ici
    pourkoi ne fait tu pas un test directe de regexp?

    ensuite pour ce qui est de recuperer la derniere valeur et bien il suffit que tu definisse tes variable (my) avant le while, pour qu'elles soient visible pendant et apres celui ci, et à chaque fois que tu croise une ligne qui match ce que tu veux elle ecrasera les valeurs precedentes, jusqu'à la derniere qui elle restera, et que tu pourra traiter par la suite
    Recherche staigiaire(s) motivé(s) sur projet perl/reseau a grande echelle. Me contacter par mp.

  5. #5
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 624
    Points : 69
    Points
    69
    Par défaut
    aurais tu un exemple pour le regexp ??

    merci d'avance

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 427
    Points : 459
    Points
    459
    Par défaut
    oui, dans mon premier post
    Recherche staigiaire(s) motivé(s) sur projet perl/reseau a grande echelle. Me contacter par mp.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 72
    Points : 38
    Points
    38
    Par défaut
    regex, veut dire en français expressions régulières.
    Une recherche simple sur google devrait t'aider. Voici un lien qui détaille un peu les regex.

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. extraire plusieures lignes d'un fichier
    Par win-pierre dans le forum C++
    Réponses: 7
    Dernier message: 22/05/2008, 17h43
  3. écrire sur plusieurs lignes dans un fichier
    Par kenny49 dans le forum Langage
    Réponses: 3
    Dernier message: 06/04/2007, 11h47
  4. Recupérer des lignes dans un fichier ou une variable
    Par vince2005 dans le forum Langage
    Réponses: 12
    Dernier message: 29/09/2006, 18h46
  5. Réponses: 12
    Dernier message: 18/06/2006, 19h42

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