I am running a simple script that is reading through a text file and adding up
floating point numbers from each line.
At the 2165 line the number goes wrong. All the numbers are money \d+.\d\d
all numbers in the hundreds to thousands.
I have removed lines thinking maybe something was screwy with the data. If i
erase the line its the next on.
If I am manually insert a line with a number it becomes that one.
Code below.... (I know its ugly but its one of those 1 time scripts that is
built as you go to massage the data) The only part that is relevent to this
issue is the total counter. $total.
here is a sample of the data....
585-00-00 Other Purchases SUPE01 1031776
76.38
585-00-00 Other Purchases SURE00 00062967
228.00
585-00-00 Other Purchases SURE00 00063067
212.64
585-00-00 Other Purchases SWED00 066804
171.00
585-00-00 Other Purchases SWED00 067034
219.75
585-00-00 Other Purchases SWED00 067140
143.00
585-00-00 Other Purchases SWED00 067187
178.50
585-00-00 Other Purchases SWED00 067297
221.50
585-00-00 Other Purchases SWED00 067408
23.00
585-00-00 Other Purchases SWED00 067411
92.00
585-00-00 Other Purchases SWED00 067564
106.00
585-00-00 Other Purchases SWED00 067677
111.00
585-00-00 Other Purchases SWED00 067830
373.50
585-00-00 Other Purchases TECH02 10406
680.16
585-00-00 Other Purchases TECH02 10414
565.04
585-00-00 Other Purchases TECH02 10479
687.96
585-00-00 Other Purchases TECH02 10480
679.08
Any ideas?
Paul
Code
--------
#!/usr/bin/perl
use strict;
use warnings;
my %vendors;
my $total;
my $credits;
my $linecount;
while ( <> ) {
chomp;
next unless ( /^\d\d\d-\d\d-\d\d/ ) ;
if ( /([\w\&]{4}\d\d)\s+/){
my $vendor = $1;
my @record = split /\s+/, $';
$record[1]=~ s/,//g;
if ( length( $_) == 121 ) {
$credits += $record[1];
$record[1] *= -1;
}
$vendors{$vendor} += $record[1];
$total += $record[1];
$linecount++;
print "$linecount:$total\n";
if ( $total =~ /\.\d\d9/ ){
print "$_\n";
print "$total\n";
die;
}
} else {
}
}
open ( LONG, "<long.txt" );
my %long;
my $longtotal;
while ( <LONG> ) {
chomp;
if ( /^\s{66}Vendor/ ) {
my $record = $';
my @record = split /\s+/, $record;
$_ =~ s/^\s+|\s+$//g foreach @record;
$record[4] =~ s/,//g;
$long{ $record[1] } = $record[4];
$longtotal += $record[4];
}
}
foreach my $vendor( sort keys %long ){
printf ( "%-10s %13f\n", $vendor, $long{$vendor} );
}
# die;
foreach my $vendor ( sort keys %vendors ) {
printf ( "%-10s %13f\n", $vendor, $vendors{$vendor} );
}
print "shorttotal:" . ($total - 3014.73) ."\n";
print "shorttotal:$total\n";
print "credits:" . ($credits + 1636519.35 + 3014.73) . "\n";
print "longtotal:$longtotal\n";
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>