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

  FORUM HardWare.fr
  Programmation
  Perl

  Suppression de ligne dans un fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Suppression de ligne dans un fichier

n°2265961
coolkis
Posté le 16-09-2015 à 15:20:27  profilanswer
 

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.

mood
Publicité
Posté le 16-09-2015 à 15:20:27  profilanswer
 

n°2265964
coolkis
Posté le 16-09-2015 à 15:39:02  profilanswer
 

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.

n°2265970
gilou
Modérateur
Modzilla
Posté le 16-09-2015 à 17:14:02  profilanswer
 

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é!  --
n°2265993
coolkis
Posté le 17-09-2015 à 10:47:20  profilanswer
 

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 ?

n°2266005
rat de com​bat
attention rongeur méchant!
Posté le 17-09-2015 à 13:19:11  profilanswer
 

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.

n°2266006
gilou
Modérateur
Modzilla
Posté le 17-09-2015 à 14:50:03  profilanswer
 

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é!  --

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

  Suppression de ligne dans un fichier

 

Sujets relatifs
Fichier .txt supérieur à un million de lignesIsoler un fichier sans extension
traitement d'un fichier supplementairefichier pgn des échecs mise en forme et génération
[Batch] Eteindre les pc de mon reseau a partir d'un fichier textePython, supprimer une ligne d'un fichier texte
remplacer une ligne dans un fichierFichier XML Ajout/Suppression de ligne
[résolu] suppression d'une ligne dans un fichier txtsuppression d'une ligne d'un fichier en vba
Plus de sujets relatifs à : Suppression de ligne dans un fichier


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