>
> I have a log file that contains a collection of individual test
> results, each beginning with a "START", and ending with a "FINISH".
>
> I would like to print out the names of the tests that have the error
> message "LOOKING FOR THIS STRING".
>
> log file:
> ----------------------------------------------------
> START : c:\disk1\test11.exe
> 12:50:09 AM Warning: Value of changed
> 12:50:09 AM Warning: Value of updated
> 12:50:09 AM Warning: Parameter ignored
> TEST_PASSED
> Time - Total,Sim,Load,Compare,Save = 13850,13761,59,10,20 mS
> FINISH
>
> START : c:\disk1\test22.exe
> 12:50:09 AM Warning: Value of changed
> 12:50:09 AM Error: LOOKING FOR THIS STRING
> 12:50:09 AM Warning: Parameter ignored
> 12:52:22 AM Error: LOOKING FOR THIS STRING
> TEST_FAILED
> Time - Total,Sim,Load,Compare,Save = 13850,13761,59,10,20 mS
> FINISHED
>
> START : c:\disk1\test33.exe
> .
> .
> .
> ----------------------------------------------------
>
> All that I can figure out how to do is to print out the line with the
> test name, and also the desired "LOOKING FOR THIS STRING" line with
> the following script:
>
> 
-----------------------------------------------------------------------------------------
>
> #!/usr/bin/perl -w
>
> use strict;
> use warnings;
> my $logfile = 'test.log';
> my @list;
> my @list2;
>
> my $line2 = '';
>
> open(LOG, $logfile) or die "Couldn't open $logfile: $!\n";
>
>
> # loop through each line, assigning $line as we go
> while( my $line = <LOG> ){
>     # test for the pattern
>     if( $line =~ /(.*)\.exe/ || $line =~ /LOOKING FOR THIS STRING/ ){
>         # $1 contains the first captured string
>         push(@list, $line);
>        }
> }
> close(LOG);
>
> # print out all the captured numbers
>       map{ print "$_\n"; } @list;
> 
-----------------------------------------------------------------------------------------
>
>
> For example, this outputs:
>
>   START : c:\disk1\test11.exe
>   START : c:\disk1\test22.exe
>   12:50:09 AM Error: LOOKING FOR THIS STRING
>   START : c:\disk1\test33.exe
>
> Does anybody have any ideas of how I should be trying to approach this
> program to get what I actually need?  For the above output, all I
> really wanted is to print out "c:\disk1\test22.exe", as that test had
> the particular failure output.

How about the program below. Hope it helps.

Rob


use strict;
use warnings;

my $logfile = 'test.log';

open LOG, $logfile or die "Couldn't open $logfile: $!";

my @test;
my $error;

while (<LOG>) {

   if (/^START/ .. /^FINISH/) {
     push @test, $_ ;
     $error = 1 if /LOOKING FOR THIS STRING/;
   }

   if (/^FINISH/) {
     if ($error) {
       print @test;
       undef $error;
     }
     undef @test;
   }
}


Thank you to everybody for the help!  I had something written very
close to this at one point, but never quite made it work properly.

-Jon

--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to