[perl]: copie fichier1 vers fichier2 sauf le début

: copie fichier1 vers fichier2 sauf le début [perl] - Perl - Programmation

Marsh Posté le 13-04-2006 à 14:47:06    

Bonjour,  
 
J'aimerais faire quelque chose sous perl:
 
Je lis un  fichier texte, et je le copie dans un autre fichier texte dès que je trouve le mot "DISPLACEMENT" ainsi que les 3 lignes précédent ce mot.
 
C'est à dire que par exemple, si mon fichier de départ est:
 
llllll
kkkkk
lll
ooo
ppp
o
phdoj
230487130
DISPLACEMENT
etc....jusque fin de fichier
 
mon nouveau fichier est :  
 
o
phdoj
230487130
DISPLACEMENT
etc....jusque fin de fichier
 
 
Voilà, j'ai déjà réussi à écrire dans le nouveau fichier à partir du mot DISPLACEMENT, mais je ne sais pas comment conserver les 3 lignes d'avant..
Qqn pourrait m'aider svp ?
merci.

Reply

Marsh Posté le 13-04-2006 à 14:47:06   

Reply

Marsh Posté le 13-04-2006 à 15:03:35    

tu conserves en permanence une copie des 3 lignes que tu viens de lire. Dès que tu vois "DISPLACEMENT", tu affiche ces trois lignes puis tu continues normalement à afficher les lignes restantes.


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

Marsh Posté le 13-04-2006 à 15:30:48    

oui merci, mais en fait mon problème réside dans le fait que je ne sais pas comment copier ces 3 lignes à la base...
je ne sais lire que jusque le mot clé (DISPLACEMENT) TOUTES LES LIGNES qui le precedent, mais pas juste les 3 lignes d'avant...
Tu vois ?

Reply

Marsh Posté le 13-04-2006 à 15:35:33    

#! /usr/freeware/bin/perl  
use warnings;
use strict;
open TTXT ,"fichier1.txt" or die "E/S";  
open NEW ,">nouveau.txt" or die "E/S";  
 
while(<TTXT> ){  
next unless (/D I S P L A C E M E N T   V E C T O R/i../END OF JOB/i);  
print NEW $_;  
}
 
Poru le moment j'en suis là.
Mais les 3 lignes précédent le mot clé n'y sont pas.

Reply

Marsh Posté le 13-04-2006 à 16:07:09    

tu as trois variables n_3, n_2, n_1 qui gardent les trois dernières lignes que tu as lues. dès que tu rencontres DISPLACEMENT, tu les affiche et tu continues à afficher les lignes suivantes.
 
demande moi si tu comprends pas ce script

Code :
  1. #! /usr/local/bin/perl                                                                                                                   
  2. $found = 0;
  3. my $n_3 = "";
  4. my $n_2 = "";
  5. my $n_1 = "";
  6. while( <> )
  7. {
  8.     if( /^DISPLACEMENT$/ )
  9.     {
  10.         $found = 1;
  11.         print $n_3;
  12.         print $n_2;
  13.         print $n_1;
  14.     }
  15.     print if $found;
  16.     $n_3 = $n_2;
  17.     $n_2 = $n_1;
  18.     $n_1 = $_;
  19. }


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

Marsh Posté le 14-04-2006 à 23:39:07    

Salut,
 

Code :
  1. #! /usr/bin/perl
  2. use warnings;
  3. use strict;
  4. my (@lignes3,@rest);
  5. while (<DATA> ){
  6.   next if 1../DEBUT/i and push @lignes3,$_;
  7.   splice(@lignes3,0,-4);
  8.   push @rest,$_;
  9. }
  10. print @lignes3,@rest;
  11. __END__
  12. llll
  13. kkkkk
  14. ksdjkfjlll
  15. ooo
  16. ppp
  17. o
  18. phdoj
  19. 230487130
  20. DEBUT
  21. etc....jusque fin de fichier

lami20j

Reply

Sujets relatifs:

Leave a Replay

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