Thanks Jim,

I would like to create a new file with new column name "Market" with the value 
"ICT, "MCI", "STL" from the hash where index "32" meets the condition. Leaving 
the original file unaltered. 

Thank you,
________________________________________
From: Jim Gibson [jimsgib...@gmail.com]
Sent: Saturday, January 08, 2011 1:32 AM
To: Chris Stinemetz; Brandon McCaig
Cc: John Delacour; beginners@perl.org
Subject: RE: problems hashing

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