On 8/27/07, Mihir Kamdar <[EMAIL PROTECTED]> wrote: > > > > I can't recommend reinventing the wheel, I would use the module to > > lookup the country name and the use hash where the country name is the > > key and the rate is the value to get the value, but if you are dead > > set on not using the module your best bet is something like this: > > > > #!/usr/bin/perl > > > > use strict; > > use warnings; > > > > my %prefix_to_rate = ( > > 12 => 0.30, > > 1234 => 0.35, > > 134 => 0.50, > > 44 => 0.70 > > ); > > > > #if there are more than about 50 country codes > > #get rid of the sort and implement min and max > > #in Perl, otherwise sort is actually faster > > my ($shortest, $longest) = > > (sort { $a <=> $b } map {length} keys %prefix_to_rate)[0, -1]; > > > > while (<DATA>) { > > my ($num, $min) = split; > > my $rate; > > for my $len (reverse $shortest .. $longest) { > > my $key = substr $num, 1, $len; > > last if $rate = $prefix_to_rate{$key}; > > } > > if (defined $rate) { > > print "the rate for $num is $rate: ", $rate * $min, > > "\n"; > > } else { > > print "$num does not have a rate\n"; > > } > > } > > > > __DATA__ > > +12555 10 > > +44555 20 > > +12345 30 > > +55555 55 > > > > Hi,
Please ignore the previous reply of mine. I have made changes and now the code is not giving any errors, but is not giving me the desired result. Plz check:- #!/usr/bin/perl use strict; use warnings; my $file_path = '/home/user71/RangerDatasource/Customization/TelekomMalaysia/Scripts/Tests/cprogs/files/ratetest'; my $write_path = '/home/user71/RangerDatasource/Customization/TelekomMalaysia/Scripts/Tests/cprogs/files/rateop' ; my %prefix_to_rate = ( '+12' =>0.30, '+1234' =>0.35, '+134' =>0.50, '+44' =>0.70 ); my %times ; my ($shortest, $longest) = (sort { $a <=> $b } map {length} keys %prefix_to_rate)[0, -1]; my $continue = 1; $SIG{INT} = $SIG{TERM} = sub { $continue = 0 }; while ($continue) { opendir my $dh, $file_path or die $!; while (my $file = readdir $dh) { my $fname = "$file_path/$file" ; next unless -f $fname; unless (exists $times{$file}){ my $line; open (my $IN_FILE,"<","$file_path/$file") or die $!." file not found" ; while ($line=readline($IN_FILE)) { my @cdr=split (/,/, $line) ; #($cdr[3],my $min) = split; my $rate; for my $len (reverse $shortest .. $longest) { my $key = substr $cdr[3], 1, $len; last if $rate = $prefix_to_rate{$key}; } open (my $OUT_FILE,">","$write_path/$file.out") or die $!; if (defined $rate) { print $OUT_FILE "the rate for $cdr[3] is $rate: ", ($cdr[6]/20)*$rate , "\n"; } else { print $OUT_FILE "$cdr[3] does not have a rate\n"; } } close $IN_FILE ; } } closedir $dh ; } Thanks, Mihir