Thanks to all........cheers

On Thu, Jun 26, 2014 at 10:28 PM, Jim Gibson <jimsgib...@gmail.com> wrote:

>
> On Jun 26, 2014, at 2:05 AM, Uday Vernekar wrote:
>
> > Please suggest if any Corrections Needed.
>
> There are several improvements you could make.
>
> >
> > [code]
> > #!/usr/bin/perl
> >
> > use 5.10.0;
> > use strict;
> > use warnings;
> >
> #########################Pattern############################################
> > #U/A/S|Test|            Test           |Loop | Run |Pass |Fail |
>  Arguments
> > #     | #  |            Name           |Count|Count|Count|Count|
> >
> #-----+----+---------------------------+-----+-----+-----+-----+-----------
> > #     |  72| Traffic Test              |    1|  561|  560|    1| (none)
> >
> ############################################################################
> > my $pattern;
>
> "$pattern" is not a good variable name for holding a string that matches
> some pattern. The 'pattern' is embedded in your regular expression. I would
> use something like "$match" or $found.
>
> > open (my $Log_file, '<', '/tmp/EO-PCPE-23-10GT') || die "Couldn't open
> /tmp/EO-PCPE-23-10GT\n\t $!";
>
> When posting programs to a mailing list, you can use the special <DATA>
> file handle and put the lines at the end of your program after a line
> containing just a '__DATA__' marker. That way, people who do not have
> access to your data file will be able to run your program.
>
> > while(<$Log_file>)
>
> It is usually better to use explicit variables:
>
>   while( my $line = <$Log_file> ) {
>     if( $line =~ ... ) {
>
> > {
> >
> > if($_ =~
> m/^(.+?)\|(.+72)\|(.+?)\|(.+?)\|(.+[0-9]|[0-9]|[0-9])\|(.+[0-9]|[0-9]|[0-9])\|(.+?)\|(.+?)$/)
>
> This reqular expression is very long and hard to read. You seem to want
> match any line that:
>
> 1. Has seven '|' characters delimiting eight fields.
> 2. Has '72' in field 2.
> 3. Has numbers in fields 5 and 6.
>
> I would recommend first splitting the line, then checking the individual
> fields for their desired content.
>
> In addition, the regex fragment '(.+[0-9]|[0-9]|[0-9])' may not be doing
> what you think. This fragment will match:
>
> 1. At least one character followed by a digit (0-9) OR
> 2. A digit (0-9) OR
> 3. A digit (0-9)
>
> The | character is alternation. You seem to be treating it as
> concatenation. The second and third alternatives are identical, and the
> third one is redundant.
>
> If you want to match three successive digits, these will all work:
>
> [0-9][0-9][0-9]
> [0-9]{3}
> \d\d\d
> \d{3}
>
>
> > {
> >  $pattern=$_;
> >
> >
> > }
> >
> > }
> > print "Pattern Found:\n$pattern";
> > my $uas=(split /\|/, $pattern)[0];
> > $uas =~ s/^\s+//;
> > my $test=(split /\|/, $pattern)[1];
> > $test =~ s/^\s+//;
> > my $test_name=(split /\|/, $pattern)[2];
> > $test_name =~ s/^\s+//;
> > my $loop_count=(split /\|/, $pattern)[3];
> > $loop_count =~ s/^\s+//;
> > my $run_count=(split /\|/, $pattern)[4];
> > $run_count =~ s/^\s+//;
> > my $pass_count=(split /\|/, $pattern)[5];
> > $pass_count =~ s/^\s+//;
> > my $fail_count=(split /\|/, $pattern)[6];
> > $fail_count =~ s/^\s+//;
> > my $arguments=(split /\|/, $pattern)[7];
> > $arguments =~ s/^\s+//;
>
> You can perform the split only once. You can also include optional
> whitespace in the delimiter string, which means the saved substrings will
> not include the whitespace:
>
>   my( $uas, $test, $test_name, $loop_count, $run_count, $pass_count,
> $fail_count,
>     $arguments ) = split('\s*\|\s*',$line);
>
> > print '-' x 30, "\n";
> > print "      Test Data       \n";
> > print '-' x 30, "\n";
> > print "UAS : $uas\n";
> > print "Test : $test\n";
> > print "Test Name : $test_name\n";
> > print "Loop Count : $loop_count\n";
> > print "Run Count : $run_count\n";
> > print "Pass Count : $pass_count\n";
> > print "Fail Count : $fail_count\n";
> > print "Arguments : $arguments\n";
> > print '-' x 30, "\n";
> > print "      RESULTS       \n";
> > print '-' x 30, "\n";
>
> You can use a 'HERE' document to print these lines:
>
>     print <<EOS;
> ------------------------------
>       Test Data
> ------------------------------
> UAS : $uas
> Test : $test
> Test Name : $test_name
> Loop Count : $loop_count
> Run Count : $run_count
> Pass Count : $pass_count
> Fail Count : $fail_count
> Arguments : $arguments
> ------------------------------
>       RESULTS
> ------------------------------
> EOS
>
>
> So putting that altogether, here is an improved program:
>
> [code]
>
> #!/usr/bin/env perl
> use strict;
> use warnings;
> while( my $line = <DATA> ) {
>   chomp($line);
>   next if $line =~ /^-/;
>   my @f = split('\s*\|\s*',$line);
>   next unless scalar @f == 8;
>   my( $uas, $test, $test_name, $loop_count, $run_count, $pass_count,
> $fail_count,
>     $arguments ) = @f;
>   if( $test eq '72' ) {
>     print <<EOS;
> ------------------------------
>       Test Data
> ------------------------------
> UAS : $uas
> Test : $test
> Test Name : $test_name
> Loop Count : $loop_count
> Run Count : $run_count
> Pass Count : $pass_count
> Fail Count : $fail_count
> Arguments : $arguments
> ------------------------------
>       RESULTS
> ------------------------------
> EOS
>     if( $fail_count != 0 && $run_count >= 0 ) {
>       print "Result: Fail\n";
>     }elsif( $fail_count == 0 && $run_count > 0 ) {
>       print "Result: Pass\n";
>     }
>   }
> }
> __DATA__
> U/A/S|Test|            Test           |Loop | Run |Pass |Fail |  Arguments
>      | #  |            Name           |Count|Count|Count|Count|
> -----+----+---------------------------+-----+-----+-----+-----+-----------
>      |  72| Traffic Test              |    1|  561|  560|    1| (none)
>
> [code]
>
>
> --
> To unsubscribe, e-mail: beginners-unsubscr...@perl.org
> For additional commands, e-mail: beginners-h...@perl.org
> http://learn.perl.org/
>
>
>


-- 
*********************************************************
Don't ask them WHY they hurt you,
because all they'll tell you is lies and excuses.
 Just know they were wrong, and try to move on.
**********************************************************

Reply via email to