Fileauswertung

Salü zäme,

Ich habe ein File mit folgendem Format:

2004-11-16 08:50:29,805 : REQUEST 
2004-11-16 08:50:32,151 : RESPONSE
2004-11-16 08:50:33,805 : REQUEST 
2004-11-16 08:50:34,151 : RESPONSE
2004-11-16 08:50:36,805 : REQUEST 
2004-11-16 08:50:37,151 : RESPONSE

Ich möchte nun gerne ein Script schreiben, dass mir jeweils die Zeit-Differenz zwischen REQUEST und RESPONSE ausgibt. Inkl. der Zeilennummer der RESPONSE.

Wer kann mir auf die Sprünge helfen?

Vielen Dank.

Gruss, Simon

Salü zäme,

Aeh… Hallo,

> 2004-11-16 08:50:29,805 : REQUEST  
> 2004-11-16 08:50:32,151 : RESPONSE  
> 2004-11-16 08:50:33,805 : REQUEST  
> 2004-11-16 08:50:34,151 : RESPONSE  
> 2004-11-16 08:50:36,805 : REQUEST  
> 2004-11-16 08:50:37,151 : RESPONSE

Ich möchte nun gerne ein Script schreiben, dass mir jeweils
die Zeit-Differenz zwischen REQUEST und RESPONSE ausgibt.
Inkl. der Zeilennummer der RESPONSE.

Wer kann mir auf die Sprünge helfen?

Hm, so ziemlich q&d:

my @array = ();
while ( )
{
 push @array, [/^(\d{4})-(\d{2})-(\d{2}) (\d{2}):frowning:\d{2}):frowning:\d{2}),(\d{3}) : ([A-Z]+)$/];
}
for (my $i=0; $i[3], $array[2\*$i+1]-\>[3]);
 my ($min\_req, $min\_resp) = ($array[2\*$i]-\>[4], $array[2\*$i+1]-\>[4]);
 my ($sec\_req, $sec\_resp) = ($array[2\*$i]-\>[5], $array[2\*$i+1]-\>[5]);
 my ($tics\_req, $tics\_resp) = ($array[2\*$i]-\>[6], $array[2\*$i+1]-\>[6]);
 my $dtime = ((($hour\_resp - $hour\_req)\*60
 + $min\_resp - $min\_req)\*60
 + $sec\_resp - $sec\_req)\*1000
 + $tics\_resp - $tics\_req;
 print $dtime."ms at line ".(2\*$i+1+1)."\n";
}

Versagt, wenn Mitternacht zwischen REQUEST und RESPONSE liegen (um die Uhrzeit passieren eh die seltsamsten Dinge). Ggf. Tag, Monat, Jahr mit beruecksichtigen.

HTH,
Gruss vom Frank.

Tach auch,

Versagt, wenn Mitternacht zwischen REQUEST und RESPONSE liegen
(um die Uhrzeit passieren eh die seltsamsten Dinge). Ggf.
Tag, Monat, Jahr mit beruecksichtigen.

genau das Problem kann man vermeiden, wenn man die Zeitwerte in „EPOCH-Sekunden“ (Sekunden seit 1.1.1970) umrechnet und dann die Differenz bildet…

use Time::Local;
$TIME = timelocal($sec, $min, $hours, $mday, $mon, $year);

$year : aktuelles Jahr (YYYY) - 1900
$mon : 0 … 11 (also 0 = Januar)

Dann klappts auch mit dem Nachbarn Tagesüberläufen!

gruss
bernhard