Hi Chas,

Look at the following code. It does not change the $cdr[13] value after
processing as is desired.

#!/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 = (
       '+1'  =>0.20,
       '+65' =>0.30,
       '+673'=>0.45,
           '+86' =>0.45,
           '+852'=>0.45,
           '+853'=>0.45,
           '+66' =>0.45,
           '+212'=>1.50,
           '+234'=>1.50,
           '+47' =>1.50,
           '+48' =>1.50,
           '+7'  =>1.50,
           '+27' =>1.50,
           '+46' =>1.50,
           '+380'=>1.50,
           '+93' =>1.50,
           '+62' =>0.22
);
my %times ;
my %hash ;
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) ;
                        my $rate;
                        if($cdr[22] eq "Budget-IDD" )
                        {
                                for my $len (reverse $shortest .. $longest)
{
                                my $key = substr $cdr[3],0,$len;
                                last if $rate = $prefix_to_rate{$key};
                                        if (defined $rate) {
                                        $cdr[13] = ($cdr[6]/20)*$rate ;
                                        }
                                }
                        }
                        $line = join(",",@cdr);
                        [EMAIL PROTECTED],3,6,7]}=$line;
                }
                        close $IN_FILE ;

                        open (my $OUT_FILE,">>","$write_path/$file.out") or
die $!;

                        while (my($key, $value) = each %hash)
                        {
                                print $OUT_FILE $value;
                }
                        close $OUT_FILE ;
                }
        }
closedir $dh ;
}


Following is the sample input data:-

2007/08/18 23:09:51,999,+60139169925,+6281917457237,,1,17,2007/08/18
23:09:34,357953001453930,502191402472982,30421,3,4117773,5.5
,2,1,1,1,,0,8,+60139169925,Budget-IDD,,9KTTB,Alcatel,5419496593,1
2007/08/18 23:10:03,999,+60199514513,+6681805297189,,1,5,2007/08/18
23:09:58,353377004203470,502191200047108,33761,3,8893845,5.5
,2,1,1,1,,0,8,+60199514513,Budget-IDD,,9KTTB,Alcatel,5419496808,1
2007/08/18 23:10:09,999,+60139484541,+62081933039638,,1,5,2007/08/18
23:10:04,359772006475961,502191402477236,36433,3,4357348,5.5
,2,1,1,1,,0,8,+60139484541,Budget-IDD,,9KTTB,Alcatel,5419496906,1
2007/08/18 23:10:19,999,+60139433881,+4781917453095,,1,559,2007/08/18
23:01:00,354388004016271,502191501305123,33802,3,10638343,55,2,1,1,1,,0,8,+60139433881,Budget-IDD,,9KTTB,Alcatel,5419497064,1
2007/08/18 23:10:27,999,+60148482721,+6285937021269,,1,86,2007/08/18
23:09:01,354813018414143,502191201919440,36643,3,4891400,11,2,1,1,1,,0,8,+60148482721,Budget-IDD,,9KTTB,Alcatel,5419497197,1



Thanks,
Mihir

Reply via email to