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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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.
In article <slrne59lrq.1gn.gvdmoort@fantasio.champignac>,
gvdmoort@NOSPAM_skynet.be 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";}
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";}