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/