Ronald Yacketta wrote: > > I need to parse the following info and generate the total elapsed > time for each function call per thread. > > <09/25/02 20:03:31.974 [21168]>|thread: 6: start getContract > <09/25/02 20:03:32.296 [21168]>|thread: 6: end successful getContract > <09/25/02 20:07:52.778 [21168]>|thread: 7: start getContract > <09/25/02 20:07:53.113 [21168]>|thread: 7: end successful getContract > <09/25/02 20:07:53.115 [21168]>|thread: 7: start getProducts > <09/25/02 20:07:53.692 [21168]>|thread: 7: end successful getProducts > <09/25/02 20:07:53.707 [21168]>|thread: 7: start getTermsAndConds > <09/25/02 20:07:53.867 [21168]>|thread: 7: end successful getTermsAndConds > <09/25/02 20:07:54.538 [21168]>|thread: 8: start getContract > <09/25/02 20:07:54.637 [21168]>|thread: 8: end successful getContract > <09/25/02 20:07:54.639 [21168]>|thread: 8: start getProducts > <09/25/02 20:07:55.079 [21168]>|thread: 8: end successful getProducts > <09/25/02 20:07:55.083 [21168]>|thread: 8: start getTermsAndConds > <09/25/02 20:07:55.193 [21168]>|thread: 8: end successful getTermsAndConds > <09/25/02 20:07:55.747 [21168]>|thread: 9: start getContract > <09/25/02 20:07:55.865 [21168]>|thread: 9: end successful getContract > <09/25/02 20:07:55.867 [21168]>|thread: 9: start getProducts > <09/25/02 20:07:56.442 [21168]>|thread: 9: end successful getProducts > <09/25/02 20:07:56.446 [21168]>|thread: 9: start getTermsAndConds > <09/25/02 20:07:56.541 [21168]>|thread: 9: end successful getTermsAndConds > > So, thread 6 has a start getContract and a end successful getContract with a > differenance in time of 0.322 > > My initial thought was to slurp the file and parse it line by line, added > the "date" "thread #" and "start call" to a hash if ( /start/ ). I would > also add the /end successful/ info into the hash, then after the parsing is > done weed throught the hash matching up the threads for each start/end and > getting the time diff.
This should do what you want: use Time::Local; my %data; while ( <DATA> ) { next unless m!(\d\d)/(\d\d)/(\d\d)\s+ (\d\d):(\d\d):(\d\d)(.\d+)\s.* thread:\s+(\d+):\s+ (end\s+successful|start)\s+(\S+)!x; my $time = timegm( $6, $5, $4, $2, $1 - 1, $3 + 2000 ) . $7; if ( $9 eq 'start' ) { $data{ "$8\0$10" } -= $time; } elsif ( $9 eq 'end successful' ) { $data{ "$8\0$10" } += $time; } } for my $key ( sort keys %data ) { my ( $thread, $name ) = split /\0/, $key; print "Thread: $thread Function: $name Time: $data{$key}\n"; } __END__ John -- use Perl; program fulfillment -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]