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);


Reply via email to