----- Original Message -----
From: "Li, Aiguo (NIH/NCI)" <[EMAIL PROTECTED]>
Date: Monday, January 24, 2005 5:14 pm
Subject: How to go back to a line and do something with it in an input fil      
e?

> hello, all.
Hello
 Seems like there is a problem with your data, or problem is miss-read. See 
comments in data.
> 
> I need to transform the column3 data from an input file as 
> indicated below
> into three values: 0, 0.4, 1.
> if there are more than 3 NoCall continuously in column3, change 
> NoCall into
> "1". this option has the highest precedence.
> for the rows where column2 is between 52 and 105 (range from a file),
> transform the values in column3 into "0.4".
> for the rows outside of this region, change the values in column3 
> into "0"
> 
> print into an output file.
> 
> I am struggling with how to go back to the line to change the 
> column 3 after
> 3 consecutive NoCall has been counted??? 
> 
> I currently read the input data into an array and used this line 
> to go back
> to the beginning of first NoCall line: my $nocalline = 
> $contents[$line_num -
> 3];
> Perl does not like it and an error message says: ""my" variable 
> $nocallinemasks earlier declaration in same scope a
> line 38. Use of implicit split to @_ is deprecated at 
> trynocall.pl line 38.
> syntax error at trynocall.pl line 38, near ");"
> 
> Can anyone give some hints?
> 
> Thanks
> 
> Aiguo
> 
> 
> input data is:                        output data should be:
> ======================                ========================
> 1     22      AA                      1       22      0
> 1     24      AA                      1       24      0
> 1     26      NoCall          1       26      0
> 1     27      BB                      1       27      0
> 1     30      AB                      1       30      0
> 1     35      NoCall          1       35      1
> 1     40      NoCall          1       40      1
^ ony 2 ahead have a "NoCall" ahead; Shouldnt this change to "1 40 0" ?
> 1     41      NoCall          1       41      1
same problem in this raw and next one
> 1     42      NoCall          1       42      1
> 1     48      AB                      1       48      0
> 1     50      AB                      1       50      0
> 1     52      BB                      1       52      0.4
> 1     53      NoCall          1       53      0.4
> 1     55      NoCall          1       55      0.4
> 1     56      BB                      1       56      0.4
> 1     66      AA                      1       66      0.4
> 1     70      NoCall          1       70      1
> 1     90      NoCall          1       90      1
> 1     99      NoCall          1       99      1
> 1     100     NoCall          1       100     1
> 1     101     NoCall          1       101     1
> 1     103     AA                      1       103     0.4
> 1     105     BB                      1       105     0.4
> 2     22      AA                      2       22      0
> 2     24      BB                      2       24      0
> 2     26      AB                      2       26      0
> 2     27      BB                      2       27      0
> 2     30      AA                      2       30      0
> 2     35      AA                      2       35      0
> 2     40      AA                      2       40      0
> 
> 
> the code I have
> =================
> #!usr/local/bin/perl
> 
> use strict;
> use warnings;
> 
> open (DATA, "C:/Aiguo_2004/SNP_Johnpark/work 
> files/summary/testnocall1.txt")or die "Can not open file \n";
> open (LOH, "C:/Aiguo_2004/SNP_Johnpark/work 
> files/summary/loh.txt") or die
> "Can not open file \n";
> open (OUT1, ">C:/perl/work/nocallout.txt") or "die can not open 
> file \n";
> 
> my @contents = <DATA>;
> my $chro_num;
> my $lohbegin;
> my $lohend;
> my $line_num = 0;
> 
>       
> while(my $lohline = <LOH>) #this file contain regions for changing 
> to 0.4
> {
> ($chro_num, $lohbegin, $lohend) = split(/\t/, $lohline);
> foreach my $line (@contents) 
>       {
>       while($line =~ /^[1..9]/)
>               {
>               $line_num++;
>               #print $line_num;
>               (my $chro, my $position, my $call) = split (/\t/, $line);
> 
>               if(($chro_num == $chro)&&($position >= $lohbegin) &&
> ($position <= $lohend))
>                       {
>                       call = 0.4;
>                       unless($call =~ "NoCall")
>                       {
>                       my $n++;
>                       my $m++;
>                       
>                       if($n >= 3)
>                               {
>                               my $nocalline = $contents[$line_num - 3];
>                               my ($nocall_chro, $nocall_begin, $nocall =
> split(/\t/, $nocalline);
>                               print "Nocall chro = $nocall_chro, Nocall
> begin = $nocall_begin \n"; 
>                               $nocall = "Nocall";
>                               }
>                       #else{$call = 0.4;}
>                       print $call;
>                       $contents[$line_num] = join('\t', $chro, $position,
> $call);
>                       }
>                       }
> #print "Chro:$chro, Position:$position, call=$call\n";
>               }
> #print @contents;
>       }
> }
> 
> close DATA;
> close OUT1;
> close LOH;
> 
> -- 
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> <http://learn.perl.org/> <http://learn.perl.org/first-response>
> 
> 
> 


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to