Suppression de ligne dans un fichier

Suppression de ligne dans un fichier - Perl - Programmation

Marsh Posté le 16-09-2015 à 15:20:27    

Bonjour,
 
Je souhaiterais supprimer toutes les lignes d'un fichier qui se trouvent avant une ligne donnée.
 
Par exemple, mon fichier contient les lignes suivantes :
 

Code :
  1. toto
  2. tata
  3. tutu
  4. titi


 
Admettons qu'une variable $ligne contienne "tutu", j'aimerais supprimer tout ce qui se trouve avant cette variable.
C'est à dire "toto et tata" devraient disparaitre.
 
Quelqu'un pourrait me guider svp ?
Merci d'avance.

Reply

Marsh Posté le 16-09-2015 à 15:20:27   

Reply

Marsh Posté le 16-09-2015 à 15:39:02    

J'avais commencé par le code suivant :
 
open(FILE, "< $FILENAME" ) or die ("prob a l'ouverture du fichier" );
@save = <FILE>;
close(FILE);
foreach (@save) { $_ = "" if ($_ =~ m/$Fichier_a_supprimer/);
chomp $_;
}
open(FILE, ">$FILENAME" ) or die ("prob a l'ouverture du fichier" );
foreach (@save) { print FILE $_."\n" if ($_);
}
close(FILE);
 
Ce code m'efface bien la ligne voulu mais ne supprime pas toutes les lignes avant.

Reply

Marsh Posté le 16-09-2015 à 17:14:02    

open(FILE, "< $FILENAME" ) or die ("prob a l'ouverture du fichier" );
@save = <FILE>;
close(FILE);  
OK!
A ce niveau, tu peux faire un  
chomp @save;
 
Puis, la fonction standard splice va être ton amie...
Un petit exemple:

Code :
  1. #!/usr/bin/perl
  2. use Modern::Perl;
  3. use Data::Dumper;
  4.  
  5. my @test = qw(toto tata tutu titi tete tutu tyty);
  6.  
  7. my $linenum = 0;
  8. my $position = 0;
  9. foreach (@test) {
  10.  if (/tutu/) {
  11.    $position = $linenum;
  12.    last; # ou pas si on veut la dernière occurence et pas la première
  13.    }
  14.  ++$linenum;
  15. }
  16.  
  17. splice @test, 0, $position;
  18. print Dumper(@test);


je te laisse appliquer cela à ton cas particulier.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 17-09-2015 à 10:47:20    

Merci pour ta réponse, j'ai essayé d'adapter le code mais je n'ai pas accès à "use Modern::Perl;"
 
<Can't locate Modern/Perl.pm in @INC (@INC contains:...>
 
Existe t'il une autre solution ?

Reply

Marsh Posté le 17-09-2015 à 13:19:11    

Citation :

je n'ai pas accès à "use Modern::Perl;"


Eh bien tu l'installes, c'est gratuit. :)  
 
Pour savoir comment faire dis nous sous quel OS tu travailles. Pour StrawberryPerl (sous Windows) un simple cpan Modern::Perl en ligne de commande suffit.

Reply

Marsh Posté le 17-09-2015 à 14:50:03    

Il peut remplacer  
use Modern::Perl;
par  
use strict;
use warnings;
 
C'est juste que use Modern::Perl; ne fait qu'une ligne au lieu de deux (et fait aussi d'autres trucs cools).
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

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