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...
[Gravure] Graver ou lire un fichier .IMG / .CCD / .SUB VoirLes fichiers portant une extension .img, .ccd et .sub sont respectivement : IMG : une image de CD, c'est-à-dire une copie binaire d'un CD ou d'un DVD sous forme d'un fichier CCD et SUB : informations sur les pistes du disque. Les fichiers...
[Windows] Obtenir la liste des fichiers d'un dossier VoirLister le contenu d'un dossier Voici une astuce simple qui permet de lister le nom des fichiers contenus dans un répertoire. Vous pourrez obtenir en un clic les titres de vos chansons, de vos photos, etc. dans un fichier...
Fichier IMG VoirFormat IMG Les fichiers IMG, CCD et SUB sont respectivement : .IMG : une image de CD, c'est-à-dire une copie binaire d'un CD ou d'un DVD sous forme d'un fichier .CCD et .SUB : informations sur les pistes du disque. Les fichiers .IMG sont...
Fichier CDA VoirFormat CDA Un fichier CDA est le plus souvent un fichier-"plage" (ou "piste") directement issu d'un CD audio. Lire un fichier CDA Pour lire de tels fichiers, il suffit de télécharger un lecteur capable de lire les CD audio, par exemple...

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