suppression de ligne

suppression de ligne - Perl - Programmation

Marsh Posté le 14-04-2008 à 14:33:43    


 
salut a tous,
 
j' ai un petit problème au niveau de perl. j'ai ecris un petit bout de code qui me permet de trier les lignes d'un fichier log à partir d' expressions régulières.
mon problème est que les lignes que j'ai trier (copier dans un autre fichier) je voudrais en meme temps les supprimer du fichier de base pour ne garder que les lignes qui sont moin remarquable...
 
ci-joint mon code:

Code :
  1. #!/usr/bin/perl
  2.                                         
  3. $chardon = 'gvar\adonis\2008-04-07\chardon.log';    
  4.  
  5. open(CHARDON, "<$chardon" )
  6. or die("Desole, impossible d'acceder a gvar\adonis\2008-04-07\chardon.log.\n" ) ;            
  7. @tabl1 = <CHARDON>;
  8. $chardbis = 'gvar\adonis\2008-04-07\chardrstlog.log';
  9. open(CHARDBIS, ">>$chardbis" )
  10. or die("Desole, impossible d'acceder a gvar\adonis\2008-04-07\chardrstlog.log.\n" );    
  11. print CHARDBIS "@tabl1";                                                
  12. close(CHARDON);                                        
  13. close(CHARDBIS);                                                        
  14.  
  15. open(CHARDBIS,"$chardbis" ) or
  16. die("Desole, impossible d'acceder a gvar\adonis\2008-04-07\chardrstlog.log.\n" );
  17.  
  18. $i = 1;                                            
  19. $a = "**********";                                                        
  20. while ($ligne1 = <CHARDBIS> )                                
  21. {    
  22.     if($ligne1 =~ /**********/)                                {
  23.     $chardlog = 'gvar\adonis\2008-04-07\chardlog**********.log';
  24.     open(CHARDLOG,">>$chardlog" ) or
  25.     die("Desole, impossible d'acceder a gvar\adonis\2008-04-07\chardlog**********.log.\n" );            
  26.     print CHARDLOG "$i $ligne1";                                
  27.     }
  28.     $i++;                                        
  29. }
  30.  
  31. print "fichiers triés avec succés et envoyés dans chardlog$a.log\n";    
  32. close(CHARDLOG);                                        
  33. close(CHARDBIS);                                                        
  34. open(CHARDBIS, "$chardbis" )
  35. or die("Desole, impossible d'acceder a gvar\adonis\2008-04-07\chardrstlog.log.\n" );        
  36. $j = 1;                                            
  37. $b ="**********";                                                
  38. while ($ligne2 = <CHARDBIS> )                            
  39. {    
  40.     if($ligne2 =~ /**********/)                            
  41.     {
  42.     $chardlog2 = 'gvar\adonis\2008-04-07\chardlog**********.log';     
  43.     open(CHARDLOG2,">>$chardlog2" )
  44.             or die("Desole, impossible d'acceder a gvar\adonis\2008-04-07\chardlog0xb74026ad.log.\n" );        
  45.     print(CHARDLOG2 "$j $ligne2" );                            
  46.     }
  47. $j++;                        
  48. }
  49. print "fichiers triés avec succés et envoyés dans chardlog$b.log\n";    
  50. close (CHARDLOG2);                                    
  51. close (CHARDBIS);


 
p.s:merci de ne pas me sortir des trucs du genre:"faut chercher!" parce que c'est déjà le cas,
sinon je n'aurais pas posté ce message.
et si certaines syntaxes vous paresses bizar c'est peut etre parce que j'utilise ActivePerl...
 
elmoricq-edit : je me suis permis de mettre ton code entre balises code, histoire de le rendre lisible


Message édité par warzoo le 17-04-2008 à 14:35:50
Reply

Marsh Posté le 14-04-2008 à 14:33:43   

Reply

Marsh Posté le 14-04-2008 à 14:39:57    

Bon déjà y a un problème : tu réouvres un bazillion de fois tes fichiers dans les boucles. Tu devrais les ouvrir qu'une seule fois avant la boucle.
 
Ensuite, je ne vois aucun tri nul  part. Sans doute veux-tu parler de filtre ?
 
Enfin, je ne connais pas d'autre moyen pour supprimer une ligne dans un fichier que de réécrire ce dernier intégralement (sans la/les ligne(s) à supprimer) dans un fichier temporaire, que tu utilises ensuite pour écraser l'ancienne version.

Reply

Marsh Posté le 14-04-2008 à 14:43:44    

merci, je vais déjà virer mes clotures et réouvertures.
effectivement, c'est plus un filtre qu'un tri.
 
le fait est que j'ai deja essayé de réécrire dans le fichier mais sans résultat ( en meme temps, je m'y prend certainement mal)
 
p.s: réponse express lol

Reply

Marsh Posté le 14-04-2008 à 17:55:59    

en fait, j'ai reussi d'une autre façon mais merci quand meme.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed