Thank you James for both your advice and suggestions. I think that solved my problem. I'm learning...
David --- James Edward Gray II <[EMAIL PROTECTED]> wrote: > On Jan 2, 2004, at 9:33 AM, David Byrne wrote: > > > Greetings, > > Howdy. > > > I've created a hash from an INPUT file and I'm > trying > > to search for each key from the hash in a DATA > file. > > I'm a little fuzzy on this part, but will see if I > can figure it out. > > > However, I can't get my script to iteratively loop > > through the DATA file for each key. Instead it > loops > > through DATA once for the first key. Below is > some > > sample data, intended output, and my code. Thank > you > > for any help. > > Well, if you want to go back over the DATA for each > gene, you need to > reopen that file each time to start over. > > > David > > > > INPUT... > > ID1 TEST1 > > ID2 TEST2 > > ID3 TEST3 > > ID4 TEST4 > > ID5 TEST5 > > ID6 TEST6 > > ID7 TEST7 > > > > DATA... > > 1 (GN ID ID LKJLSKJLDK) > > 2 (GN ID ID5 LKJLSKJLDK) > > 3 (GN ID LKJLSKJLDK ID3) > > 4 (GN ID2 ID LKJLSKJLDK) > > 5 (GN ID ID9 LKJLSKJLDK) > > 6 (GN ID1 ID LKJLSKJLDK) > > 7 (GN ID ID8 LKJLSKJLDK) > > 8 (GN ID0 ID LKJLSKJLDK) > > 9 (GN ID ID4 LKJLSKJLDK) > > > > OUTPUT is: > > ID1 6 TEST1 > > > > OUTPUT should be: > > ID1 6 TEST1 > > ID2 4 TEST2 > > ID3 3 TEST3 > > ID4 9 TEST4 > > ID5 2 TEST5 > > > > MY CODE... > > I suggest adding: > > use strict; > use warnings; > > Write good code, stay sane longer and get better > help from us. Win, > win, win. > > I assume this is a code fragment and that at least > one open statement > was omitted here, just FYI. > > > my %genedex; > > foreach $line (<INPUT>) { > > Don't do that. The foreach reads the whole file > into memory and then > walks it line by line. If we just want one at a > time, let's fetch them > that way: > > while (defined(my $line = <INPUT>)) { > > > my ($gene_name,$remainder) = > split(/\t/,$line,2); > > $genedex{$gene_name} = $remainder; > > } > > > > foreach $gene (sort keys %genedex) { > > You should reopen DATA right here each time through > the loop, if you > want to start over with it: > > open DATA, '<path/to/file.txt' or die "File error: > $!"; > > > while ($line=<DATA>) { > > if ($line =~ /$gene/) { > > ($probe_id) = split(/\s/,$line,2); > > print "$gene\t$probe_id\t$genedex{$gene}\n"; > > } > > } > > Hope that helps you along. > > James > > > -- > To unsubscribe, e-mail: > [EMAIL PROTECTED] > For additional commands, e-mail: > [EMAIL PROTECTED] > <http://learn.perl.org/> > <http://learn.perl.org/first-response> > > __________________________________ Do you Yahoo!? Find out what made the Top Yahoo! Searches of 2003 http://search.yahoo.com/top2003 -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>