[perl] Extraire la derniere ligne d'un fichie

Résolu
fxta -  
 fxta -
Bonjour, je souhaiterai tout simplement extraire la derniere ligne d'un fichier texte sachant que celui ci est de taille variable et que je ne connais aucun mot de la dernière ligne ni de celle d'avant.

J'ai essayé avec la fonction reverse :

open(FENT, '< logwls.txt'); 
foreach my $line (reverse(<FENT> )) { 
 print $line; 
} 
close(FENT);


Le $line me met bien ma derniere ligne en premier mais je n'arrive pas à extraire uniquement cette ligne.

ps : pour les curieux le fichier est de la forme

[info]balbalbalblablabalbalba
[info]balbalbalblablabalbalba
[info]balbalbalblablabalbalba
<2009-17-12 08h14><inbox><listenning on port xxxxxxx>
<2009-17-12 11h00><inbox><listenning on port xxxxxxx>
<2009-17-12 12h20><inbox><listenning on port xxxxxxx>


mais tres difficile d'utiliser les regex car aucun fichier ne se termine de la meme maniere.

Merci.

4 réponses

lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Re,

Une autre méthode
#!/usr/bin/perl
use strict;use warnings;

open FENT, '< logwls.txt' or die "E/S : $!\n";;
chomp(my $derniere = (reverse(<FENT>))[0]);
print $derniere,"\n";
close(FENT);
__END__



3
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

Pas besoin des regex ;-)
lami20j@debian:~/trash/ccm_perl$ cat logwls.txt
info]balbalbalblablabalbalba
[info]balbalbalblablabalbalba
[info]balbalbalblablabalbalba
<2009-17-12 08h14><inbox><listenning on port xxxxxxx>
<2009-17-12 11h00><inbox><listenning on port xxxxxxx>
<2009-17-12 12h20><inbox><listenning on port xxxxxxx>
lami20j@debian:~/trash/ccm_perl$
lami20j@debian:~/trash/ccm_perl$ cat derniereligne.pl
#!/usr/bin/perl

open FENT, '< logwls.txt' or die "E/S : $!\n";;
foreach my $line (reverse(<FENT> )) {
         print $line and last; # je sors de la boucle après le 1er print
}
close(FENT);
__END__
lami20j@debian:~/trash/ccm_perl$
lami20j@debian:~/trash/ccm_perl$ perl derniereligne.pl
<2009-17-12 12h20><inbox><listenning on port xxxxxxx>

0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Re,

Et pour la récupérer

#!/usr/bin/perl
use strict;use warnings;
my $derniere;

open FENT, '< logwls.txt' or die "E/S : $!\n";;
foreach (reverse(<FENT> )) {
        chomp($derniere=$_) and last;
}
print $derniere,"\n";
close(FENT);
__END__


Exécution

lami20j@debian:~/trash/ccm_perl$ perl derniereligne.pl
<2009-17-12 12h20><inbox><listenning on port xxxxxxx>

0
fxta
 
Merci beaucoup lami20j. Petite préférence pour la derniere méthode, c'est exactement ce que je voulais !

Bonne journée.
0