Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

controle de boucle

1 réponse
Avatar
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 clair...On 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||
\nn \nn

1 réponse

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