Un peu de PERL pour un newbie [Résolu/Fermé]

Signaler
-
 Forest -
Bonjour,
je cherche a faire un petit script perl dont voici le but:
j ai des longs fichiers de simulation reseau qui se presentent ainsi:
Start of 45
The number of receivers is : 10
The number of sent-out packets is: 312
The number of received packets is: 1309
Ratio is 0.419551282051282
Latency is 0.100953127774637
End of 45
Start of 60
The number of receivers is : 10
The number of sent-out packets is: 618
The number of received packets is: 2620
Ratio is 0.423948220064725
Latency is 0.056496490223664
End of 60
...
toutes les 15 secondes
je veux lire ce fichier et grace a mon petit script perl creer un autre fichier qui se presenterait sous cette forme:

Nbr of Sent Out:
312
618
...

Nbr of Received:
1309
2620
...

voila c tout

j ai un debut de code qui creer un tableau pour contenir toutes ces valeurs (900s. de simulation donc 60 valeurs puiske toutes les 15 sec.)
mais je block pour les recuperer
comment faire ???


voici mon debut de code si ca peut aider

$Answers[2][60];
$Nbr_answers = 0;
$Time_answers = 0;
$SentOut = "sent-out";
$Received = "received";
$The = "The";

for ($count=0; $count<60; $count++)
{
$Answers[0][$count] = 0;
$Answers[1][$count] = 0;
}


($traceFile, $outFile) = @ARGV;
$outFile = ">".$outFile;
open (MYFILE, $traceFile) || die "cannot open the trace file\n";

while (<MYFILE>)
{
# chomp;
if (/$Received/) {
print $_ ; => ICI je voudrais recuperer le nombre de packets et incrementer ma variable pour mon tableau
}
if (/$SentOut/) {print "blip";} => et ICI le nombre de packets envoyes ....
}

print "Done!\n";

print PACKET "Packet Sent\n\n";
for ($count=0; $count<60; $count++)
{
print PACKET $Answers[0][$count], "\n";
}
print PACKET "\n\nPacket Received\n\n";
for ($count=0; $count<60; $count++)
{
print PACKET $Answers[1][$count], "\n";
}


close (MYFILE);
close (PACKET);

2 réponses

yes j trouve :p
Tu peux faire comme ça :

my %results;
#($traceFile, $outFile) = @ARGV;
my $tracefile = "test.txt";
open (MYFILE,$tracefile)|| die "cannot open the trace file\n";
foreach my $ligne (<MYFILE>) {
chomp $ligne;
my @ligne = split(/ /,$ligne);
my $valeur = pop(@ligne);
$results{join(" ",@ligne)}[$#{$results{join(" ",@ligne)}}+1] = $valeur;
}
close MYFILE;
foreach my $cle (keys %results) {
print $cle."\n";
print join("\n",@{$results{$cle}})."\n";
}


Ensuite, à toi de voir comment exploiter le contenu de %results ;)