perl 读取所需文件的路径,然后打开相应的文件_perl教程-查字典教程网
perl 读取所需文件的路径,然后打开相应的文件
perl 读取所需文件的路径,然后打开相应的文件
发布时间:2016-12-28 来源:查字典编辑
摘要:以下是DNA序列,存储在window下F:perldata.txt里面:复制代码代码如下:AAAAAAAAAAAAAAGGGGGGGTTTT...

以下是DNA序列,存储在window下F:perldata.txt里面:

复制代码 代码如下:

AAAAAAAAAAAAAAGGGGGGGTTTTCCCCCCCC

CCCCCGTCGTAGTAAAGTATGCAGTAGCVG

CCCCCCCCCCGGGGGGGGAAAAAAAAAAAAAAATTTTTTAT

AAACG

下面是程序:

复制代码 代码如下:

#下面的程序是用来计算一段DNA序列中ATGC的数量的

#首先定义四种碱基的数量为0

$count_A=0;

$count_T=0;

$count_C=0;

$count_G=0;

#首先要先把序列进行合并成一行

#先确定所要处理的文件的路径及文件名(在windows系统下面要按照这样的例子写

#f:perldata.txt

print "please input the Path just like this f:perldata.txtn";

chomp($dna_filename=<STDIN>);

#打开文件

open(DNAFILENAME,$dna_filename)||die("can not open the file!");

#将文件赋予一个数组

@DNA=<DNAFILENAME>;

#以下两步要把所有的行合并成一行,然后去掉所有的空白符

$DNA=join('',@DNA);

$DNA=~s/s//g;

#将DNA分解成,然后赋值到数组

@DNA=split('',$DNA);

#然后依次读取数组的元素,并对四种碱基的数量进行统计

foreach $base(@DNA)

{

if ($base eq 'A')

{

$count_A=$count_A+1;

}

elsif ($base eq 'T')

{

$count_T=$count_T+1;

}

elsif ($base eq 'C')

{

$count_C=$count_C+1;

}

elsif ($base eq 'G')

{

$count_G=$count_G+1;

}

else

{

print "errorn"

}

}

#输出最后的结果

print "A=$count_An";

print "T=$count_Tn";

print "C=$count_Cn";

print "G=$count_Gn";

下面是运行的结果:

复制代码 代码如下:

F:>perla.pl

please input the Path just like this f:perldata.txt

f:perldata.txt

error

A=40

T=17

C=27

G=24

F:>

大家可能观察到有一个error的出现,这是为什么呢?

大家仔细看一看最上面的原始 DNA序列,用特殊颜色标记的,可以看到有一个V,所以会输出错误。

这里把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。这样才能够满足我们的需求。

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

复制代码 代码如下:

#下面的程序是用来计算一段DNA序列中ATGC的数量的

#首先定义四种碱基的数量为0

$count_A=0;

$count_T=0;

$count_C=0;

$count_G=0;

#首先要先把序列进行合并成一行

#先确定所要处理的文件的路径及文件名(在windows系统下面要按照这样的例子写

#f:perldata.txt

print "please input the Path just like this f:perldata.txtn";

chomp($dna_filename=<STDIN>);

#打开文件

open(DNAFILENAME,$dna_filename)||die("can not open the file!");

#将文件赋予一个数组

@DNA=<DNAFILENAME>;

#以下两步要把所有的行合并成一行,然后去掉所有的空白符

$DNA=join('',@DNA);

$DNA=~s/s//g;

#然后依次读取字符串的元素,并对四种碱基的数量进行统计

for ($position=0;$position<length $DNA;++$position)

{

$base=substr($DNA,$position,1);

if ($base eq 'A')

{

$count_A=$count_A+1;

}

elsif ($base eq 'T')

{

$count_T=$count_T+1;

}

elsif ($base eq 'C')

{

$count_C=$count_C+1;

}

elsif ($base eq 'G')

{

$count_G=$count_G+1;

}

else

{

print "errorn"

}

}

#输出最后的结果

print "A=$count_An";

print "T=$count_Tn";

print "C=$count_Cn";

print "G=$count_Gn";

得到的结果如下:

复制代码 代码如下:

F:>perla.pl

please input the Path just like this f:perldata.txt

f:perldata.txt

error

A=40

T=17

C=27

G=24

F:>

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新perl学习
    热门perl学习
    脚本专栏子分类