Posez votre question Signaler

[perl] copie fichier1 -> fichier2 sauf début

fifto 54Messages postés 24 mars 2006Date d'inscription - Dernière réponse le 13 avril 2006 à 19:10
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 "DEBUT" 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
DEBUT
etc....jusque fin de fichier

mon nouveau fichier est :

o
phdoj
230487130
DEBUT
etc....jusque fin de fichier


Voilà, j'ai déjà réussi à écrire dans le nouveau fichier à partir du mot DEBUT, mais je ne sais pas comment conserver les 3 lignes d'avant..
Qqn pourrait m'aider svp ?
merci.
Lire la suite 

[perl] copie fichier1 -> fichier2 sauf début »

4 réponses
Réponse
+0
moins plus
Salut,

Si tu postais ce que tu a déjà écrit, celà ferait grandement avancer le "schmillblick" et ferait par la même gagner un temps précieux à notre ami "lami20j", non ?

De plus celà t'aiderait sûrement un peu plus du fait que si des incohérences existent dans ton code, elles seraient revues et corrigées au passsage.

;-))
Ajouter un commentaire
Réponse
+0
moins plus
oui t'as raison pardon.

Voilà ce que j'ai écrit:

#! /usr/freeware/bin/perl

use warnings;
use strict;

open TTXT ,"fichier1.txt" or die "E/S";
open NEW ,">nouveau.txt" or die "E/S";

open NEW2 ,">nouveau.txt" or die "E/S";

while(<TTXT>){
next unless (/DEBUT/i../END/i);
print NEW $_;
}


MAis ce code affiche à partir de "DEBUT" dans le nouveau fichier, pas les 3 lignes avant ce mot..
Ajouter un commentaire
Réponse
+0
moins plus
Merci.

Tu le veux absolument en Perl ton code ?

Parce qu'avec un simple filtre comme "grep" ça peut le faire sur une seule petite ligne de commande...
grep -B 3 -A "$(cat fich.txt | wc -l)" "DEBUT" fich.txt > fichier.txt
;-))
Ajouter un commentaire
Réponse
+0
moins plus
Salut,
#! /usr/bin/perl

use warnings;
use strict;

my (@lignes3,@rest);

while (<DATA>){
  next if 1../DEBUT/i and push @lignes3,$_;
  splice(@lignes3,0,-4);
  push @rest,$_;
}
print @lignes3,@rest;
__END__
llll
kkkkk
ksdjkfjlll
ooo
ppp
o
phdoj
230487130
DEBUT
etc....jusque fin de fichier

La solution de jipicy est bien plus simple.
C'est très bien d'utiliser les outils déjà existentes.

A toi de voir.

lami20j
Ajouter un commentaire
Ce document intitulé « [perl] copie fichier1 -> fichier2 sauf début » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
5 extensions si vous voulez revenir à l'ancien Facebook