答案一定隐藏在问题之中

反思从昨天到今天一来遇到的问题,让我苦思许久的问题,就在不经意之间得到了解决。

当我们遇到一个问题的时候,什么才是解决之道呢?


凡是我们遇到问题,既然是问题,一定有问题的构成要素,我们要做的就是把问题中的所有关键内容进行提取,或者不断的对问题进行各个方面的更加详细的搜集信息。让问题得到更加全面的描述。当描述的越全面的时候,我们的解就越来越明显。


所以我们在面对问题的时候沉静下来,思考问题,才是思考答案。


我们来看一下,前面我的博文在回对全部序列的时候,总是有一部分,不能够匹配。

这是个大的问题,但是对于这个问题的分析,

我们排序以后,发现sample1是完全可以回对的,没有问题,

以后的每一个sample 都有问题。但是后面处理剩余样品的每一段程序都是一样的。

每一个sample的结果都是在开始很长的一段无法匹配,但是到了后面又都能够回对上。


就这样,我们把问题 一个个的解析,就会发现问题出现在开始的部分。

第一部分是正常的,那一定是第一部分的改变,对于后面有了不同的影响。所以才会使后面的程序出现问题。


open (DNA,"Chr5_join.txt")||die("can not open");  
while(<DNA>)  
{  
    @information1=split;  
    $position{$information1[0]}{sample0}=$information1[1];  
}  
  
open (DNA1,"TAIR_vs_bur.maf")||die("can not open");  
$z=<DNA1>;  
$z=<DNA1>;  
$z=<DNA1>;  
$z=<DNA1>;  
$z=<DNA1>;  
$z=<DNA1>;  
$z=<DNA1>;  
$z=<DNA1>;  
$z=<DNA1>;  
$z=<DNA1>;  
$z=<DNA1>;  
$z=<DNA1>;  
$z=<DNA1>;  
$z=<DNA1>;  
$/="\n\n";                                         #其实问题就出现在这里,我们把系统的默认的换行符给改变了,现在我们认为只有两个换行符才是一行。
while(<DNA1>)  
{  
    @mout = split/\n/,$_;  
    @score= split/=/, $mout[0];  
    unless ($score[1]<90000)  
    {  
        @info1 = split/\s+/,$mout[1];  
        @info2 = split/\s+/,$mout[2];  
          
        @sequen1 = split// ,$info1[6];  
        @sequen2 = split// ,$info2[6];  
  
        for($cout1=$info1[2]+1;$cout1<$info1[3]+$info1[2]+1;$cout1++)  
        {  
            if(exists $position{$cout1})  
            {  
                $cout=$cout1-$info1[2]-1;  
                $position{$cout1}{sample1}=$sequen2[$cout];  
            }  
            else   
            {  
                next;  
            }  
        }  
  
    }  
}  
  
open (DNA2,"TAIR_vs_can.maf")||die("can not open");  
$z=<DNA2>;                                        #但是这里我们使读取的默认的一行,还是改编后的一行呢?很显然,我们依然认为这里应该读取一个换行符的一行,但是我们却忘记了我们已经把默认的换行符给改变了,这里真实读取的其实不是一行了,而是很长的一段,这一段的结尾包含着两个换行符。这就是问题的症结所在。我们要做的就是在这一行前面把换行符给给改过来,$/="\n";
$z=<DNA2>;   
$z=<DNA2>;  
$z=<DNA2>;  
$z=<DNA2>;  
$z=<DNA2>;  
$z=<DNA2>;  
$z=<DNA2>;  
$z=<DNA2>;  
$z=<DNA2>;  
$z=<DNA2>;  
$z=<DNA2>;  
$z=<DNA2>;  
$z=<DNA2>;  
$/="\n\n";  
while(<DNA2>)  
{  
    @mout = split/\n/,$_;  
    @score= split/=/, $mout[0];  
    unless ($score[1]<90000)  
    {  
        @info1 = split/\s+/,$mout[1];  
        @info2 = split/\s+/,$mout[2];  
          
        @sequen1 = split// ,$info1[6];  
        @sequen2 = split// ,$info2[6];  
  
        for($cout1=$info1[2]+1;$cout1<$info1[3]+$info1[2]+1;$cout1++)  
        {  
            if(exists $position{$cout1})  
            {  
                $cout=$cout1-$info1[2]-1;  
                $position{$cout1}{sample2}=$sequen2[$cout];  
            }  
            else   
            {  
                next;  
            }  
        }  
  
    }  
}  


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值