Rechercher : dans
Par :

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

Dernière réponse le 13 avr 2006 à 19:10:38 fifto, le 13 avr 2006 à 14:45:57 
 Signaler ce message aux modérateurs

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.

Meilleures réponses pour « [perl] copie fichier1 > fichier2 sauf début » dans :
Perl - Les fichiers Voir La notion de filehandle On appelle filehandle (traduisez descripteur de fichier), dans un programme Perl, le nom permettant de manipuler une connexion d'entrée-sortie (les entrées-sorties standards vues précédemment sont connues par les filehandles...
[Windows XP] Copier un message d'erreur VoirGros problème sur le PC, ou pour l'utilisation d'un logiciel, celui-ci envoie systématiquement une boîte de message lors de son utilisation ... Je veux donc demander de l'aide sur CCM ... jusqu'à présent, je connaissais 2 solutions : - La copie...
Télécharger SuperCopier VoirSuperCopier est un gestionnaire de copie de fichiers libre pour Windows, proposant des fonctionnalités non couvertes par le système d'exploitation Windows et optimisant les transferts. Parmi les améliorations apportées par cet outil, citons...
UNIX - Les fichiers VoirIntroduction aux fichiers Unix Sous les systèmes UNIX tout élément est représenté sous forme de fichier. L'ensemble des fichiers est architecturé autour d'une unique arborescence dont la base, appelée racine, est notée «/». Types de...
Fichier TTF VoirFormat TTF Un fichier TTF (True Type Fonts) est un fichier de police de caractères. Une police de caractères (appelée aussi police d'écriture ou fonte) permet de créer du texte possédant une apparence spécifique. Pour utiliser une telle police...

1

jipicy, le 13 avr 2006 à 15:12:19

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.

;-)) Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

2

fifto, le 13 avr 2006 à 15:30:56

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..

Répondre à fifto

3

jipicy, le 13 avr 2006 à 16:58:02

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
;-)) Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

4

 lami20j, le 13 avr 2006 à 19:10:38

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

Répondre à lami20j
Collection CommentÇaMarche.net