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 :

Ajout de lignes de fichier dans une variable


Sujet :

Langage Perl

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Points : 27
    Points
    27
    Par défaut Ajout de lignes de fichier dans une variable
    Bonjour à tous,

    je fais des recherches dans le forum, mais n'ai pas trouvé.
    Voici ma question
    je liste un fichier en recherchant la chaîne de caractère ERR en début de ligne et si je trouve ERR, je voudrais copier chaque ligne dans une même variable.
    Cette variable me servira pour créer le corps d'un message que j'enverrai pas mail.

    Pouvez vous m'aider.

    Cordialement

  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
    Il faut ouvrir ton fichier, le parcourir ligne par ligne et récupérer les lignes souhaitées dans ta variable

    pourrais-tu mettre ton code qu'on t'aide à le corriger?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Points : 27
    Points
    27
    Par défaut
    voici mon code

    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
     
    $dest="D:\\scripts\\perl\\bpx\\log_20141103.txt";
     
     
    open( LOG, "$dest" );
    chomp(@list = <LOG>);
    close(LOG);
    $nb=@list;
    # recherche de ERR en debut de ligne
    	for( $a=0 ; $a < $nb ; $a++ )
    	{
    	        @result=split(" " , $list[$a]);
    		if ($result[0] eq "ERR" )
    		{
    		print "$list[$a] \n";
    		}
     
    	}
    A la place du print c'est là que je veux mettre l'ajout dans une variable

  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
    Citation Envoyé par laurent33500 Voir le message
    A la place du print c'est là que je veux mettre l'ajout dans une variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $dest="D:\\scripts\\perl\\bpx\\log_20141103.txt";
     
     
    open( LOG, "$dest" );
    my $lignesRecup='';
    while ( <LOG> ){
    	if ($_ =~ /^\s*ERR/ ){                 # recherche ligne commençant par ERR avec éventuellement 1 ou plusieurs espace(s) avant
    		$lignesRecup .= "$_" ;
    	}
    }
    j'ai traité le fichier ligne par ligne car je préfère mais si tu veux absolument le traitement depuis un array dis-le

  5. #5
    Membre confirmé
    Avatar de Schmorgluck
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2006
    Messages : 371
    Points : 558
    Points
    558
    Par défaut
    Citation Envoyé par 6ril23 Voir le message
    j'ai traité le fichier ligne par ligne car je préfère mais si tu veux absolument le traitement depuis un array dis-le
    Franchement, pour un fichier de log, dont la taille est par nature variable sinon totalement imprévisible, un traitement ligne par ligne est certainement préférable plutôt que tout charger en mémoire.
    There's nothing like $HOME!

  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
    Citation Envoyé par Schmorgluck Voir le message
    Franchement, pour un fichier de log, dont la taille est par nature variable sinon totalement imprévisible, un traitement ligne par ligne est certainement préférable plutôt que tout charger en mémoire.
    je trouve aussi mais on ne sais jamais, il a peut être des contraintes qui l'oblige à utiliser un array

  7. #7
    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
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    ++ pour la lecture ligne par ligne (hors raison majeure de ne pas le faire).

  8. #8
    Membre confirmé
    Avatar de Schmorgluck
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2006
    Messages : 371
    Points : 558
    Points
    558
    Par défaut
    Je viens de repérer un problème dans la version initiale du code. Cette partie là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	        @result=split(" " , $list[$a]);
    		if ($result[0] eq "ERR" )
    Le test du if ne peut être vrai que si la ligne commence par "ERR ", et pas si elle commence par "ERR" suivi par autre chose qu'un espace. Du coup faudrait demander à laurent33500 ce qu'il veut au juste.
    There's nothing like $HOME!

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Points : 27
    Points
    27
    Par défaut
    Bonjour à tous,

    je vous remercie pour votre aide.
    La solution de 6ril23 me convient et fonctionne pour moi.

    Dans mon fichier log les lignes en erreur commencent toujours par ERR suivi d'un espace et de la date ex:ERR _20141103 Impossible de copier......

    Merci encore pour votre réactivité.

  10. #10
    Membre confirmé
    Avatar de Schmorgluck
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2006
    Messages : 371
    Points : 558
    Points
    558
    Par défaut
    Du coup, la solution de 6ril23 ne marche pas bien pour ton vrai problème, en fait. Si, pour quelque raison que ce soit, une de tes lignes commence par "ERRANCE" par exemple, elle sera incluse dans ton résultat final.

    Une solution partielle est de remplacer la regex de la ligne 7 de sa version par /^\s*ERR\b/ ou, pour être plus exhaustif, /^\s*ERR _\d{8}/
    There's nothing like $HOME!

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

Discussions similaires

  1. [FTP] Récupération d'un fichier dans une variable
    Par leeloo1902 dans le forum Langage
    Réponses: 3
    Dernier message: 05/06/2007, 20h31
  2. lancer wget et récuperer le fichier dans une variable
    Par luc-b dans le forum Général Python
    Réponses: 8
    Dernier message: 10/05/2006, 10h47
  3. Shell: récupérer le bon nom de fichier dans une variable
    Par claralavraie dans le forum Linux
    Réponses: 1
    Dernier message: 10/01/2006, 11h45
  4. Plusieurs lignes de texte dans une variable texte
    Par Loko dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 15/12/2005, 12h51
  5. Récupérer contenu de fichier dans une variable
    Par peppena dans le forum Linux
    Réponses: 4
    Dernier message: 15/06/2005, 12h50

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