in reply to Iteration in perl

ok, this looks like some perl API for some type of database: but i'm having difficulties understanding you . do you want your results to look like this :
1,WG0045068-DNA,A01,0,102186_A01_WTCCCT519791,... 2,WG0045068-DNA,B01,0,102186_B01_WTCCCT519793,... 3,WG0045068-DNA,C01,0,102186_C01_WTCCCT519805,... 1,WG0045066-DNA,A01,0,102176_A01_WTCCCT527545,... 2,WG0045066-DNA,B01,0,102176_B01_WTCCCT527498,...
or ... could you give us an example of how the results should look like ...

Update:

let me simplify :

i have i file with lines like :

WG0045068-DNA,A01,0,102186_A01_WTCCCT519791,... WG0045068-DNA,B01,0,102186_B01_WTCCCT519793,... WG0045068-DNA,C01,0,102186_C01_WTCCCT519805,... WG0045068-DNA,A01,0,102187_A01_WTCCCT519791,... WG0045068-DNA,B01,0,102188_B01_WTCCCT519793,... WG0045068-DNA,C01,0,102187_C01_WTCCCT519805,... WG0045068-DNA,A01,0,102187_A01_WTCCCT519791,... WG0045068-DNA,B01,0,102188_B01_WTCCCT519793,... WG0045068-DNA,C01,0,102186_C11_WTCCCT519805,... and i want to get: 1,WG0045068-DNA,A01,0,102186_A01_WTCCCT519791,... 2,WG0045068-DNA,B01,0,102186_B01_WTCCCT519793,... 3,WG0045068-DNA,C01,0,102186_C01_WTCCCT519805,... 4,WG0045068-DNA,C01,0,102186_C11_WTCCCT519805,... 1,WG0045068-DNA,A01,0,102187_A01_WTCCCT519791,... 2,WG0045068-DNA,C01,0,102187_C01_WTCCCT519805,... 3,WG0045068-DNA,A01,0,102187_A01_WTCCCT519791,... 1,WG0045068-DNA,B01,0,102188_B01_WTCCCT519793,... 2,WG0045068-DNA,B01,0,102188_B01_WTCCCT519793,...
to get this you could creata some counter like this:
open (FILE1, "<", "filein.txt") || die "$!"; open (FILE2, ">", "fileout.out") || die "$!"; my $counter; while(<FILE1>){ m/.+,.+,\d+,(\d+)_.+/; $counter->{$1}++ ; print FILE2 "$counter->{$1},$_"; } close FILE1; close FILE2; result would be : 1,WG0045068-DNA,A01,0,102186_A01_WTCCCT519791,... 2,WG0045068-DNA,B01,0,102186_B01_WTCCCT519793,... 3,WG0045068-DNA,C01,0,102186_C01_WTCCCT519805,... 1,WG0045068-DNA,A01,0,102187_A01_WTCCCT519791,... 1,WG0045068-DNA,B01,0,102188_B01_WTCCCT519793,... 2,WG0045068-DNA,C01,0,102187_C01_WTCCCT519805,... 3,WG0045068-DNA,A01,0,102187_A01_WTCCCT519791,... 2,WG0045068-DNA,B01,0,102188_B01_WTCCCT519793,... 4,WG0045068-DNA,C01,0,102186_C11_WTCCCT519805,... not sorted, but sorting should not be a problem :)
i'm still not sure if this is what you would like to accomplish :)

Update 2:

ok cool, so you have a file or some variable with some data in it

input.file 102186 102176
, what i would do is hash that data
open (FILEIN, "<", "input.file") || die "$!"; my $counter; while(<FILEIN>){ $counter->{$_} = 0; } close FILEIN;
and now you have a counter so what i would do next is :
elsif($output eq "Inhouse") { ... and here just implemente the counter. you can do the same thing for fo +r previous decisions, if needed ... else { $counter->{$save{$sam}{plateid}}++; print OUT "$counter->{$save{$sam}{plateid}},$save{$sam +}{platename},$save{$sam}{well},$save{$sam}{case},$save{$sam}{plateid} +_$save{$sam}{well}_$save{$sam}{clone},Homo sapiens,$save{$sam}{gender +},,$save{$sam}{vol},50,$save{$sam}{extmethod},,0,$save{$sam}{father}, +$save{$sam}{mother},,$save{$sam}{source}\n"; } ...

Replies are listed 'Best First'.
Re^2: Iteration in perl
by Anonymous Monk on Apr 03, 2009 at 10:38 UTC
    Exactly .. Thats How it should be.But the line numbers should vary depending on the $save{$sam}{count} number which is the number of lines of information available for that plate.
Re^2: Iteration in perl
by Anonymous Monk on Apr 03, 2009 at 12:27 UTC
    Hi, Thanks for your time .But, My Input file is something like this:
    102186 102176
    And I need to get the output like
    1,WG0045068-DNA,A01,0,102186_A01_WTCCCT519791,... 2,WG0045068-DNA,B01,0,102186_B01_WTCCCT519793,... 3,WG0045068-DNA,C01,0,102186_C01_WTCCCT519805,... 1,WG0045066-DNA,A01,0,102176_A01_WTCCCT527545,... 2,WG0045066-DNA,B01,0,102176_B01_WTCCCT527498,...
    At the moment I am getting the output as:
    1,WG0045068-DNA,A01,0,102186_A01_WTCCCT519791,... 2,WG0045068-DNA,B01,0,102186_B01_WTCCCT519793,... 3,WG0045068-DNA,C01,0,102186_C01_WTCCCT519805,... 4,WG0045066-DNA,A01,0,102176_A01_WTCCCT527545,... 5,WG0045066-DNA,B01,0,102176_B01_WTCCCT527498,...
    Does this help by any means??? Thanks!!!

      You should just check in the beginning of every iteration if platename is changed, and if it is, just reset numeration. Perhaps the following snippet would help you. Note that I not tested it

      my $oldname; # here we will store previous name foreach my $sam (@order) { # here is the current name my $platename = $save{$sam}{platename} || $save{$sam}{plateid}; # if name is changed, reset n to 1 $n = 1 unless $patename eq $oldname; if ( $save{$sam}{clone} =~ /BLANK|Water/i ) { print OUT "$n,$save{$sam}{platename},$save{$sam}{well},,$save{$sam}{plateid}$sav +e{$sam}{well}_BLANK,,,BLANK,,,,,,,,,,\n"; $n++; } print OUT "$n,$platename,$save{$sam}{well},$save{$sam}{case},$save{$sam}{plateid +}_$save{$sam}{well}_$save{$sam}{clone},Homo sapiens,$save{$sam}{gende +r},,$save{$sam}{vol},50,$save{$sam}{extmethod},,0,$save{$sam}{father} +,$save{$sam}{mother},,$save{$sam}{source}\n"; $n++; # store platename $oldname = $platename; }