[Perl] effacer début fichier texte

effacer début fichier texte [Perl] - Perl - Programmation

Marsh Posté le 05-04-2006 à 09:19:20    

Bonjour,  
 
 
j'aimerais coder un script en perl qui m'efface le début d'un fichier texte et le réécrit dans un nouveau fichier texte.  
 
En fait, le début de ce fichier s'arrête quand je rencontre le mot " D I S P L A C E M E N T " dans ce fichier.  
 
à partir de ce mot, le nouveau fichier créé doit rester identique au fichier texte d'origine.  
 
Vous savez comment on fait ca svp ?  
merci
 

Reply

Marsh Posté le 05-04-2006 à 09:19:20   

Reply

Marsh Posté le 05-04-2006 à 09:58:10    

un truc dans ce genre là, ça te sort toutes les lignes du fichier donné en argument à partir du moment où on rencontre le mot DISPLACEMENT. Je suis pas sûr d'avoir compris ce que tu voulais exactement, mais ça ne devrait pas en être trop loin... :)

Code :
  1. #! /usr/local/bin/perl                                                                                                                   
  2. $found = 0;
  3. while( <> )
  4.     $found = 1 if /DISPLACEMENT/;
  5.     print if $found;
  6. }


Message édité par franceso le 05-04-2006 à 09:59:00

---------------
TriScale innov
Reply

Marsh Posté le 05-04-2006 à 16:25:41    

c'est cool, ca marche !!
 
merci !  
J'ai d'ailleurs rajouté $found = 0 if /fintexte/
pour qu'il s'arrete quand il detecte fintexte, ca fonctionne également.
 
Encore merci !  
:-)

Reply

Marsh Posté le 05-04-2006 à 16:31:26    

fiftoman a écrit :

J'ai d'ailleurs rajouté $found = 0 if /fintexte/
pour qu'il s'arrete quand il detecte fintexte

tu devrais plutôt sortir du while quand il détecte "fintexte" : ça téviterait de parcourir la fin du fichier qui ne t'intéresse pas.


---------------
TriScale innov
Reply

Marsh Posté le 05-04-2006 à 18:57:35    

En fait, je vois pas comment le faire sortir de la boucle..
 
Voilà mon code:
 
#! /usr/freeware/bin/perl
use strict;
use warnings;
 
my $found = 0;
 
@ARGV = qw (fichier1.txt);
open(F06bis,">>fichier2.txt" ) || die "impossible to create this file: $!\n";
 
while (<> )
{
$found = 1 if /mot_de_debut/;
$found = 0 if /mot_de_fin/;
print F06bis if $found;
}
 
 
Par contre j'ai un probleme avec les gros fichiers. Je m'explique:
 
Pour les petits fichiers, il me coupe bien mon texte comme il faut pour le mettre dans fichier2.txt. Donc pas de problème.
 
Par contre, si le fichier1.txt est très gros, il me coupe le début mais pas la fin.... C'est À dire que fichier2.txt commence effectivement à 'mot_de_debut' mais il se finit comme le fichier1.txt à la seule différence qu'il m'a effacé juste 'mot_de_fin'.
 
Il y a une limite de taille de fichier pour les boucles en perl ????
 
Merci.
Miguel

Reply

Marsh Posté le 05-04-2006 à 22:16:18    

Citation :

En fait, je vois pas comment le faire sortir de la boucle..


la commande 'last' te permet de sortir directement de la boucle en cours. dans ton cas, il suffit de mettre

last if /mot_de_fin/


 

Citation :

Par contre, si le fichier1.txt est très gros, il me coupe le début mais pas la fin.... C'est À dire que fichier2.txt commence effectivement à 'mot_de_debut' mais il se finit comme le fichier1.txt à la seule différence qu'il m'a effacé juste 'mot_de_fin'.

si l'utilisation de 'last' ne règle pas ce problème, je ne sais pas ce que tu peux faire. Je n'ai jamais été confronté à ce type de problèmes
 

Citation :

@ARGV = qw (fichier1.txt);
...
while( <> )

il serait plus propre d'ouvrir directement 'fichier1.txt' en lecture


Message édité par franceso le 05-04-2006 à 22:16:29

---------------
TriScale innov
Reply

Marsh Posté le 06-04-2006 à 11:45:02    

ok merci.  
 
Pour le problème avec les gros fichiers, on m'a dit que ca dépend de la RAM du PC, c'est ce que j'ai entendu dire, mais rien n'est sûr à 100 %..
 
Donc bon, je crois que le sujet est clos jusqu'à nouvel ordre..
 
bonne journée !  

Reply

Sujets relatifs:

Leave a Replay

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