谁能帮我注释一小段perl程序,尤其是if语句判断的是什么啊,while (<IN>) 是自动读一个字符串吗,存在哪里
答案:4 悬赏:80 手机版
解决时间 2021-11-12 00:38
- 提问者网友:不爱我么
- 2021-11-11 15:55
谁能帮我注释一小段perl程序,尤其是if语句判断的是什么啊,while (<IN>) 是自动读一个字符串吗,存在哪里
最佳答案
- 五星知识达人网友:举杯邀酒敬孤独
- 2021-11-11 16:29
1、open IN, $seq_file || die $!; 这句读文件的,IN是文件句柄的名字,$seq_file指明文件来源, 后面的 || die $!表示 如果前面的open失败 则用 die报告错误,并结束程序, $!在报错的时候内容为实际的出错原因。提示,最好使用3个参数的open函数,比如:
open ( IN, '<', $file_name) or die "Can't open $file_name : $!";
第二个参数 <表示读入, >表示写出, >> 表示追加。
2、while () { 这一句, 相当于2句, 首先是 $_ = ;默认读入的内容存在系统默认变量 $_中, 然后while循环 测试 $_的值是否非空,如果读入成功则进入循环;
3、if (/^>(\S+)/) { 这一句用于检查 $_ 的内容和正则表达式 /^>(\S+)/ 是否匹配, ^表示文件头, 用()括起来的内容可以在后面引用匹配的实际的值,如果不需要该值就不需要括号了。比如,文件读入内容为: >nm_415621 rna ; 那么后面紧接着的变量赋值 my $tagId=$1; 结果就是nm_415621 , $1 引用了前面匹配的括号里的内容。
4、原来这样啊,那要是同时读2个变量
(/>(\S)+\s+(\d+)/)
my $tagId=$1;
my $count=$2;
是这样吗?要是没有if,怎么读里的变量啊,比如my $seq=; 怎么从 $seq抽取$tagId和$count?
答: 这个不用if来判断是不行的, 因为 $seq=;理论上是读入文件,但是失败了呢,比如读完了或者文件为空,则 $seq 是没有值的后面也酒不能用了,所以要先确保 $seq 有值,就是要加一句 if ($seq){..} , 还不如 if ($seq= ){..} 方便;正则匹配的时候也是, 你不知道能不能匹配成功。代码如下:
/>(\S)+\s+(\d+)/;my $tagId=$1;my $count=$2;
有时候对有时候会出错!为什么? 因为可能匹配失败啊,比如这一行内容是 :acgtacgt,肯定没有匹配的内容,my $tagId=$1;my $count=$2;这里的$1和$2是没有值的,所以就会报错了,但是;
if(/>(\S)+\s+(\d+)/){ my $tagId=$1;my $count=$2;} 这个肯定对,成功匹配的时候 $1匹配前面的, $2匹配后面的数字,刚好是想要的内容。
open ( IN, '<', $file_name) or die "Can't open $file_name : $!";
第二个参数 <表示读入, >表示写出, >> 表示追加。
2、while (
3、if (/^>(\S+)/) { 这一句用于检查 $_ 的内容和正则表达式 /^>(\S+)/ 是否匹配, ^表示文件头, 用()括起来的内容可以在后面引用匹配的实际的值,如果不需要该值就不需要括号了。比如,文件读入内容为: >nm_415621 rna ; 那么后面紧接着的变量赋值 my $tagId=$1; 结果就是nm_415621 , $1 引用了前面匹配的括号里的内容。
4、原来这样啊,那要是同时读2个变量
(/>(\S)+\s+(\d+)/)
my $tagId=$1;
my $count=$2;
是这样吗?要是没有if,怎么读
答: 这个不用if来判断是不行的, 因为 $seq=
/>(\S)+\s+(\d+)/;my $tagId=$1;my $count=$2;
有时候对有时候会出错!为什么? 因为可能匹配失败啊,比如这一行内容是 :acgtacgt,肯定没有匹配的内容,my $tagId=$1;my $count=$2;这里的$1和$2是没有值的,所以就会报错了,但是;
if(/>(\S)+\s+(\d+)/){ my $tagId=$1;my $count=$2;} 这个肯定对,成功匹配的时候 $1匹配前面的, $2匹配后面的数字,刚好是想要的内容。
全部回答
- 1楼网友:胯下狙击手
- 2021-11-11 19:18
你这应该是读取一个FASTA格式的序列文件,每个序列的名字以“>”开头,下面是序列,但是如果序列是多行的,那么这个程序就有问题了。。。
- 2楼网友:怀裏藏嬌
- 2021-11-11 19:10
--正则
if (/^>(\S+)/) { #如果一行的行首是这种形式:>非空格
if (/>\S+\s+(\d+)/) { # >非空格 123(数字)追问为什么if (/^>(\S+)/),(\S+)用了括号
if (/>\S+\s+(\d+)/),\S+没用括号,最后(\d+)有括号,有什么区别吗
还有open IN, $seq_file || die $!;
IN只是一个名字吗,还是只要是读文件就要open IN
要是同时读两个文件,IN岂不是就冲突了追答--后面 $1 是(...)里的值
要是同时读两个文件:open IN1; open IN2追问原来这样啊,那要是同时读2个变量
(/>(\S)+\s+(\d+)/)
my $tagId=$1;
my $count=$2;
是这样吗?要是没有if,怎么读里的变量啊,比如my $seq=; 怎么从 $seq抽取$tagId和$count
if (/^>(\S+)/) { #如果一行的行首是这种形式:>非空格
if (/>\S+\s+(\d+)/) { # >非空格 123(数字)追问为什么if (/^>(\S+)/),(\S+)用了括号
if (/>\S+\s+(\d+)/),\S+没用括号,最后(\d+)有括号,有什么区别吗
还有open IN, $seq_file || die $!;
IN只是一个名字吗,还是只要是读文件就要open IN
要是同时读两个文件,IN岂不是就冲突了追答--后面 $1 是(...)里的值
要是同时读两个文件:open IN1; open IN2追问原来这样啊,那要是同时读2个变量
(/>(\S)+\s+(\d+)/)
my $tagId=$1;
my $count=$2;
是这样吗?要是没有if,怎么读
- 3楼网友:青灯有味
- 2021-11-11 17:40
整个程序的大致意思是打开$seq_file这个路径的文件,
然后逐行读取while()当然是放到$_里面
如果找到满足条件的行,例如
>tagfirst 100
kkkkkkkk
判断读到的行是上面的格式>非空格n个为tag 空格n个 数字n个为个数
读取下一行seq,下一行长度满足要求,以tag为键存储seq和个数。。。。
然后逐行读取while(
如果找到满足条件的行,例如
>tagfirst 100
kkkkkkkk
判断读到的行是上面的格式>非空格n个为tag 空格n个 数字n个为个数
读取下一行seq,下一行长度满足要求,以tag为键存储seq和个数。。。。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯