controle de boucle

Le
Gauthier
Bonjour à tous,

J'ai une série de fichiers-texte à traiter ligne par ligne ;
ils comprennent systématiquement des lignes bien précises à partir
desquelles le traitement à appliquer change. Je me demandais quelle
serait la meilleure structure à utiliser pour ne pas effectuer de tests
inutile, vu que ces lignes ne surviennent qu'une seule fois.

Essayons d'être clairOn a par exemple

blablabla
blablabla
blablabla
blablabla
blablabla
1
blablabla
blablabla
blablabla
blablabla
blablabla
2
blablabla
blablabla
blablabla
blablabla
blablabla
3

Il me faudrait une boucle qui fasse quelque chose comme

while (<FILE>) {
faire quelque chose jusqu'à ce que $_ =~ /1/
faire autre chose jusqu'à ce que $_ =~ /2/
faire encore autre chose
etc.
}

Que me conseillez-vous ?
--
^^ Gauthier
(_____/°°-ç
| _`-"
)/@mmm||
n n
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Asterbing
Le #110960
In article says...
while (<FILE>) {
faire quelque chose jusqu'à ce que $_ =~ /1/
faire autre chose jusqu'à ce que $_ =~ /2/
faire encore autre chose
etc.
}



Pourquoi pas mettre la valeur de l'élément que tu cherches dans une
liste et les routines à effectuer en hash, puis incrémenter quand tu
trouves un élément (de transition) dans ton fichier ; en supposant ici
bien sûr que tu les cherches dans un ordre prévu à l'avance (1 arrive
toujours avant 2, lui-même avant 3, etc)

Ainsi, ça devient quelque chose comme :

---------------
#!/usr/bin/perl

use strict;
use warnings;
print "Content-type: text/htmlnn";

my $i = 0;
my @tags = (1, 2, 3); # les éléments de transition que tu cherches
my %subs = (0 => &do_a, 1 => &do_b, 2 => &do_c); # les routines

open FILE, "data.txt" or die "échec ouverture";
while (<FILE>){
if($_ =~ /$tags[$i]/ && $i <= $#tags - 1){$i++;}
$subs{$i}($_);}
close FILE;
exit 0;

sub do_a{ print "$_[0] : avant tag '$tags[0]'<br>n";}
sub do_b{ print "$_[0] : avant tag '$tags[1]'<br>n";}
sub do_c{ print "$_[0] : avant tag '$tags[2]'<br>n";}

Juste une idée.

Publicité
Poster une réponse
Anonyme