Une version un poil moins tricky:
Code :
- #!/usr/bin/perl
- use warnings;
- use strict;
- open my $FE, '<', "resultat.txt" or die "Pas lu\n";
- my $printnext = 0;
- while (<$FE> ) {
- if ($printnext) {
- $printnext = 0;
- print;
- next;
- }
- if (/^2008/) {
- $printnext = 1;
- print;
- next;
- }
- }
- close $FE;
|
A partir de la quelle tu peux écrire une version un poil plus complexe,
qui tient compte de cas incomplets (car les fichiers de donnée parfaits...):
seconde ligne apres une avec 2008 ne commençant pas par "Capacité :",
ce qui semble être une de tes contraintes, et cas de deux lignes successives
commençant par 2008.
Code :
- #!/usr/bin/perl
- use warnings;
- use strict;
- open my $FE, '<', "resultat.txt" or die "Pas lu\n";
- my $printnext = 0;
- while (<$FE> ) {
- if ($printnext) {
- unless (/^Capacité :/) {
- if (/^2008/) {
- print " !! PAS DE CAPACITE!! \n";
- print;
- $printnext = 1;
- next;
- }
- chop;
- print;
- print " !!PAS DE CAPACITE!! \n";
- $printnext = 0;
- next;
- }
- print;
- $printnext = 0;
- next;
- }
- if (/^2008/) {
- print;
- $printnext = 1;
- next;
- }
- }
- close $FE;
|
Ou le code équivalent (pour une fois qu'on peut employer un redo, ce qui est rare, on ne va pas se gêner)
Code :
- #!/usr/bin/perl
- use warnings;
- use strict;
- open my $FE, '<', "resultat.txt" or die "Pas lu\n";
- my $printnext = 0;
- while (<$FE> ) {
- if ($printnext) {
- $printnext = 0;
- unless (/^Capacité :/) {
- if (/^2008/) {
- print " !! PAS DE CAPACITE!! \n";
- redo;
- }
- chop;
- print;
- print " !!PAS DE CAPACITE!! \n";
- next;
- }
- print;
- }
- if (/^2008/) {
- $printnext = 1;
- print;
- }
- }
- close $FE;
|
Si on se permet de mettre me message d'erreur en tête de ligne, et non en bout de ligne erronnée (ou vide) comme précédemment, on aboutit a un script un peu plus élégant:
Code :
- #!/usr/bin/perl
- use warnings;
- use strict;
- open my $FE, '<', "resultat.txt" or die "Pas lu\n";
- my $printnext = 0;
- while (<$FE> ) {
- if ($printnext) {
- $printnext = 0;
- unless (/^Capacité :/) {
- print " !! PAS DE CAPACITE!! ";
- if (/^2008/) {
- print "\n";
- redo;
- }
- }
- print;
- }
- if (/^2008/) {
- $printnext = 1;
- print;
- }
- }
- close $FE;
|
A+,
Message édité par gilou le 31-05-2008 à 17:49:25
---------------
There's more than what can be linked! -- Iyashikei Anime Forever! -- AngularJS c'est un framework d'engulé! --