perl函数substr

把DNA序列经过整合成一行,然后去除所有的空白字符以后,又把$DNA通过split函数变成了数组,然后进行统计,那有没有更好的办法呢?

其实perl里有一个函数,substr。

我们先来看一看这个函数的用法,substr是针对一个大字符串的操作符(The substr function works with only a part of a larger string )言外之意就是对一个很长的字符串,进行片段化处理,取其中的一部分。我们这里用到的就是这个特性。

$little_string =substr($large_string,$start_position,$length)

$小片段=substr($大片段,$你要截取的小片段的起始位置,$你要截取的长度)

我们这里为了统计DNA中各种碱基的数量,所以要处理的字符串是一个碱基,所以我们要把$length设置为1。这样才能够满足我们的需求。

下面我们把修改过的代码写下:

  1. #下面的程序是用来计算一段DNA序列中ATGC的数量的  
  2.   
  3. #首先定义四种碱基的数量为0  
  4. $count_A=0;  
  5. $count_T=0;  
  6. $count_C=0;  
  7. $count_G=0;  
  8. #首先要先把序列进行合并成一行  
  9.   
  10. #先确定所要处理的文件的路径及文件名(在windows系统下面要按照这样的例子写  
  11. #f:\\perl\\data.txt  
  12. print "please input the Path just like this f:\\\\perl\\\\data.txt\n";  
  13. chomp($dna_filename=<STDIN>);  
  14. #打开文件  
  15. open(DNAFILENAME,$dna_filename)||die("can not open the file!");  
  16. #将文件赋予一个数组  
  17. @DNA=<DNAFILENAME>;  
  18.   
  19. #以下两步要把所有的行合并成一行,然后去掉所有的空白符  
  20. $DNA=join('',@DNA);  
  21. $DNA=~s/\s//g;  
  22.   
  23.   
  24. #然后依次读取字符串的元素,并对四种碱基的数量进行统计  
  25. for ($position=0;$position<length $DNA;++$position)  
  26. {  
  27.     $base=substr($DNA,$position,1);  
  28.     if ($base eq 'A')  
  29.     {  
  30.         $count_A=$count_A+1;  
  31.     }  
  32.     elsif ($base eq 'T')  
  33.     {  
  34.         $count_T=$count_T+1;  
  35.     }  
  36.     elsif ($base eq 'C')  
  37.     {  
  38.         $count_C=$count_C+1;  
  39.     }  
  40.     elsif ($base eq 'G')  
  41.     {  
  42.         $count_G=$count_G+1;  
  43.     }  
  44.     else  
  45.     {  
  46.         print "error\n"  
  47.     }  
  48. }  
  49. #输出最后的结果  
  50. print "A=$count_A\n";  
  51. print "T=$count_T\n";  
  52. print "C=$count_C\n";  
  53. print "G=$count_G\n";  
  54.   
  55.       



得到的结果如下:

  1. F:\>perl\a.pl  
  2. please input the Path just like this f:\\perl\\data.txt  
  3. f:\\perl\\data.txt  
  4. error  
  5. A=40  
  6. T=17  
  7. C=27  
  8. G=24  
  9.   
  10. F:\> 
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值