At 9:26 PM -0700 1/7/11, Chris Stinemetz wrote:
Thanks Brandon,

Ultimately I am trying to take the value from the input data in index position "31" and assign one of the three keys to it. For example if index 31 has the value 801 it should be assigned "ICT" when I run the program. I hope I explained it better. Thank you for your help!

What should be done with the value "ICT"? Do you want to write a new version of the file?


On Fri, Jan 7, 2011 at 10:51 PM, Chris Stinemetz
<cstinem...@cricketcommunications.com> wrote:
 #!/usr/bin/perl

 use warnings;
 use strict;

 my $data = (<>);

 #Market configurations has for cells
 my %marketInfo = (
   "STL" => { "start" => 300,
              "end"   => 599, },
   "MCI" => {  "start" => 1,
              "end"   => 299, },
   "ICT" => { "start" => 800,
              "end"   => 850, },
 );

 %marketInfo = split /;/, $data;

Do not do this! You have just overwritten and destroyed your market information.

 >
 for (keys %marketInfo) {
   print "$marketInfo{$_}\n";
 }


Presuming that you do not destroy the information in %marketinfo, why do you want to print it? Are you trying to replace part of the %marketinfo hash with data from the file? Are you trying to replace data in the file with data from the %marketinfo hash?


 >
 Below is a few lines of the data I am working with from text file:

 PACE | EVDOPCMD | 33.0 | 101218 | 07 |

8;1023240136;1218;0;1;00a000001a2bcdc7;0310003147702376;ac016d4a;;;5.6.128.8;0;;;;;43234169;43234349;;;10000;1;1;;0;;19;5.6.128.22;172.30.151.5;304;3;304;3;;;;;15;175;15;175;15;175;1;1798;1251;0;0;2;19;20;;;;;1;1;1;0;128;5.6.128.8;;;;;;;301;5.6.128.8;;;8;304;3;;;;1;43244037;;;1;18;43234169;0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1;;;;;;43234416;0;0;304;3;21;19;175;15;405;1;1;1;1;0;125;1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;|;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;|
> 8;1023240137;1218;0;1;00a000001db74ace;;ac0174ca;43243423;1678442111;5.6.128.8;1;0;;43242544;43244207;43243423;43243647;;;1000;1;1;;0;;19;5.6.128.26;;372;2;372;2;;43243012;0;43243562;15;175;15;175;15;175;1;;;;;5;48;19;20;49;50;;0;1;2;0;68;5.6.128.8;;;;;;;301;5.6.128.8;;;8;372;2;;;;1;43244207;;;1;18;43243423;0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1;;;

You might use a loop something like this (untested):

while( my $line = <> ) {
  next if $line =~ /^PACE/;
  chomp($line);
  my @data = split(';',$line);
  my $entry = $data[30];  # or 31 if you are using zero-based indexing
  for my $key ( keys %marketinfo ) {
    if( $entry >= $marketinfo{$key}->{start} &&
          $entry <= $marketinfo{$key}->{end}
    ) {
        $entry = $key;
        last;
    }
  }
  # do something with $entry
}




--
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to