On Sat, Jan 24, 2004 at 10:14:24PM -0700, danield ([EMAIL PROTECTED]) wrote:
> Hello all,
>
> Thanks to Charles and Tim, I have advanced to the final step with my
> script. After the script verifies that there is line (Summary Log...)
> and that the log is from correct year and month. I want it to find a
> line where is " Impressions: XX" and retrieve that value.
> However I got 0 (zero) as an result, even tough I know that there are
> values (Impressions).
>
> The script now looks like:
>
> #!usr/bin/perl -w
>
> use strict;
> use Fcntl qw[:flock];
>
> my $impressions = 0;
> my $iofile =
> '/other/XPSmaint/scripts/billing/daniel/input/c07_impressions_io.info';
>
> open (IO, $iofile) || die("Could not open file 1!");
>
> while (<IO> ) {
> chop;
> my ($FH, $output, $file2check, $month, $year) = split (/\s+/, $_);
>
> open OUT, ">> $output";
>
> chdir $FH or die "$!";
>
> while (glob $file2check) {
> open FH, $_ or die $!;
> flock FH, LOCK_SH or die $!;
> while (<FH> ) {
> chomp;
> if ( / Summary Log \(generated:/ ) {
> my($emptyspce, $summary, $log, $generated, $day_word, $monthfile,
> $day_number, $time, $timezone, $yearfile ) = split(/\s+/, $_);
> #print "File $file2check is $monthfile, $year\n";
> if ($monthfile eq $month
> and $yearfile eq $year){
> #print "File has this year: $yearfile and month: $monthfile in it.\n"}
> if ( /Impressions:/ ) {
> my($text, $value) = split(/:/, $_);
> $impressions += $value if ($value =~ /\d+/);
> }
> }
> }
> }
> close FH or die $!;
> }
> print OUT 'Total impressions: ', $impressions or die $!;
> }
>
> Any suggestions?
The following bits of your code seem to work fine for me -
#!/usr/bin/perl
use warnings;
use strict;
open OUT, ">> output" or die $!;
my $impressions = 0;
while(<DATA>) {
if (/Impressions:/) {
my($text, $value) = split(/:/, $_);
$impressions += $value if ($value =~ /\d+/);
}
}
print OUT 'Total impressions: ', $impressions or die $!;
__DATA__
Impressions: 23
Impressions: 12
Impressions: 34
__END__
I would try putting "print" in front of -
"$impressions += $value if ($value =~ /\d+/);" and verify it is spitting out
what you want. If it doesn't I suspect the "0" comes from your global declaration
"my $impressions = 0;" That means a problem between the global
declaration and the last line of your inner 'while' loop -
"$impressions += $value if ($value =~ /\d+/);"
Or if the print statement shows
"$impressions += $value if ($value =~ /\d+/);" is spiting out what you
want then possibly "print OUT 'Total impressions: ', $impressions or die $!;"
needs to be moved into you inner while loop.
Just some thoughts.
Kent
--
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>