I would like to sort my final report in the following order:
$data[31],$data[32],$data[38]
How would I add this into my following program to get the report sorted this
way?
Thanks in advance.
Chris
#!/usr/bin/perl
use warnings;
#use strict;
use FileHandle;
use IO::Handle;
RAW->format_lines_per_page(10000000000);
format RAW_TOP =
@|||||||||||||||||||||||||||||||||||||||
"######--> Smart Phone report. <--######",
Market ESN/MIN Mobile Cell Sector Carrier Bytes
========================================================================================
.
format RAW =
@<<<<<<<< @|||||||||||||| @|||||||||||||| @|||||||| @|||||||| @||||||| @>>>>>>>>
$mkt,$mtype,$smartPhone,$cell,$sector,$carrier,$rlptxat
.
# SmartPhone type Hash based on ESN or MEID HEX number
my %smartPhone = (
"CURVE850a" => { start => "a000001ca64E38",
end => "a00000255c29c0", },
"KYOM6000" => { start => "a0000012b71b00",
end => "a0000012fef1a0", },
"CURVE850" => { start => "ffffffff001388",
end => "ffffffff001770", },
# "Huawei" => { start => "a00000130fa7d0",
# end => "ffffffff001770", },
);
#### Market assignment Hash based on cell number
my %marketInfo = (
MCI => { start => 1,
end => 299, },
STL => { start => 300,
end => 599, },
ICT => { start => 800,
end => 850, },
);
sub getSmartPhone
{
my $val = shift;
foreach my $k (keys %smartPhone)
{
my ($start, $end) = @{$smartPhone{$k}}{qw/start end/};
return $k if $start ge $val and $val le $end;
}
return "";
}
sub getMarket
{
my $val = shift;
foreach my $k (keys %marketInfo)
{
my ($start, $end) = @{$marketInfo{$k}}{qw/start end/};
return $k if $start <= $val and $val <= $end;
}
return "";
}
open(RAW, ">test.rpt");
while (<>) {
chomp;
if (/;/) {
@data = split /;/;
if ($data[31] =~ m/^-?\d+$/) { #### regular expression for real numerical
value
$mkt = getMarket($data[31]);
}
else
{
$mkt = "";
}
if ( length($data[5]) > 12) {
$smartPhone = getSmartPhone(substr($data[5],2,14));
}
else
{
$smartPhone = "";
}
($mtype,$cell,$sector,$carrier,$rlptxat) =
($data[5],$data[31],$data[32],$data[38],$data[44]);
# print "$mkt\t $mtype\t $smartPhone\t $cell\t $sector\t $rlptxat\n";
write(RAW);
}
}
select(RAW);
close(RAW);