Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Shop Recherche
2035 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  supprimer des lignes contenant une valeur donnée

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

supprimer des lignes contenant une valeur donnée

n°2224228
rita9999
Posté le 06-04-2014 à 15:01:30  profilanswer
 

Bonjour,
j'ai un fichier log que je veux le nettoyer par supprimer les lignes qu'ont une valeur différente de sent
mon fichier est structurécomme suit:
[url]Mar  2 05:14:11 smtp p/smtp[***], relay=**.**.**:**, delay=0.**, dsn=*.*.*, status=sent (** *.0.0 Ok: queued as *******)
Mar  2 05:14:11 smtp p/smtp[***], relay=**.**.**:**, delay=0.**, dsn=*.*.*, status=deffered (** *.0.0 Ok: queued as *******)
Mar  2 05:14:11 smtp p/smtp[***], relay=**.**.**:**, delay=0.**, dsn=*.*.*, status=rejected (** *.0.0 Ok: queued as *******)[/url]

mood
Publicité
Posté le 06-04-2014 à 15:01:30  profilanswer
 

n°2224229
gilou
Modérateur
Modzilla
Posté le 06-04-2014 à 15:45:57  profilanswer
 

Vous ne voulez que la première ligne trouvée par valeur de sent?
Et les lignes sans sent, on en fait quoi?
 
En tout cas, il faut procéder ainsi:
# vous créez un hash dont les clés seront les valeurs de sent
my %sent;
Dans la boucle de lecture du fichier
while (<$fhin> ) {
  # vous testez s'il y a un sent et vous capturez son contenu dans un groupe
  if (/status=sent\s*(\([^)]+)/) {
    # vous testez si on a déjà trouvé une telle valeur de contenu
    unless ($sent{$1}) {
      # pas trouvé, on en met la valeur a 1 et on envoie sur le fichier de sortie
      $sent{$1} = 1;
      print $fhout $_;
    }
  }
  else {
     # et a vous d'envoyer ou pas une ligne sans sent en sortie en décommentant si nécessaire
     # print $fhout $_;
  }
}
 
ou bien vous ne voulez que les lignes qui ont status=sent?
C'est plus facile alors:
while (<$fhin> ) {
  print $fhout $_ if (/status=sent/);
}
 
($fhin et $fhout: handles du fichier en entrée et de celui en sortie).
 
A+,


Message édité par gilou le 06-04-2014 à 15:50:29

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2224241
rita9999
Posté le 06-04-2014 à 20:41:17  profilanswer
 

Je vais essayer maintenant

n°2224242
rita9999
Posté le 06-04-2014 à 20:43:02  profilanswer
 

les lignes sans sent je veux les supprimer

n°2224248
gilou
Modérateur
Modzilla
Posté le 06-04-2014 à 22:15:49  profilanswer
 

Donc c'est ce que j'ai dit, on ne garde que les lignes avec sent.
 
while (<$fhin> ) {  
  print $fhout $_ if (/status=sent/);  
}  
 
je vous laisse faire autour ce qu'il faut (ouverture et fermeture des fichiers)
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2224253
rita9999
Posté le 06-04-2014 à 22:46:54  profilanswer
 

oui ça marche merci b1 :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  supprimer des lignes contenant une valeur donnée

 

Sujets relatifs
JS - Expression régulière : supprimer des attributs de balises html[GNUPLOT] Supprimer les sorties d'erreur du terminal [Résolu]
[VBA] Donner une valeur numérique à une chaine de caractèreProblème Importation base de donnée
[Résolu] Insérer un caractère dans une chaine à une position donnéeBookmarklet - supprimer résultats recherche boncoin
afficher les infos de ma base de donnée en page html dès l'ouvertureRécupérer des en têtes de colonne selon des classements(grande.valeur)
Recuperer valeur radio boutton placer lien url sans reset page[c] Probleme afficher valeur correcte tableau
Plus de sujets relatifs à : supprimer des lignes contenant une valeur donnée


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR