On 06/23/2011 05:51 PM, yixf wrote:
> 不用Bioperl,直接使用hash也很容易实现的。不过bioperl的普适性更好,毕竟
> bioperl的诞生 就是为了解决大家都会遇到的问题。
> 如果学完perl,还不会用hash,那就无话可说了。
>
> 在 2011年6月23日 下午5:13,xiumu <[email protected]
> <mailto:[email protected]>>写 道:
>
>     最好不要引用什么东西,就是单纯的程序就能实现。20种氨基酸比较多,写
>     一个剩下的我自己 补就好了。程序越容易理解越好
>
>     On 6月23日, 下午1时03分, jie liu <[email protected]
>     <mailto:[email protected]>> wrote:
>     > 写的很乱,请参考。附件有序列文件和程序文件
>     >
>     >
>     
> ###///////////////////////////////////////////////////////////////////////#
>     ##
>     > ###//////////////程序名称:..
>     > ###//////////////作者:盛夏
>     > ###//////////////时间:2011/06/22
>     > ###//////////////备注:序列处理部分的代码来源于 柳城
>     >
>     
> ###///////////////////////////////////////////////////////////////////////#
>     ##
>     >
>     > #!/usr/bin/perl -w
>     >
>     > $dirname = "D:/xProject/Perl/3"; #指定Random DNA sequences所在目录
>     >
>     > opendir( DIR, $dirname ) || die "Error in opening dir $dirname\n";
>     >
>     > while ( ( $filename = readdir(DIR) ) ) {
>     >
>     > #print("$filename\n"); #循环输出该目录下的文件。
>     >
>     > $num = 0;
>     > $/ = '>'; #输入记录分隔符,默认是/n
>     >
>     > open FASTA, "<$dirname/$filename";
>     > open disc, ">disc_$filename"; ## 生成一个文件保存描述信息
>     > open seq, ">seq_$filename"; ## 生成一个文件保存序列信息
>     > open all, ">all_$filename"; ## 生成一个文件记录完整的信息
>     > while (<FASTA>) {
>     >
>     > $seq_line = '';
>     > s/>//g;
>     > @seq = split "\n";
>     > if (@seq) {
>     > $desc = $seq[0]; ## 这是>后面的描述
>     > chomp($desc);
>     > foreach $i ( 1 .. ( @seq - 1 ) ) {## '..'意思同'~'
>     > chomp( $seq[$i] );
>     > $seq[$i] =~ s/\n//g; ## 把序列的换行符去掉
>     > $seq_line .= $seq[$i]; ##把多行的Fasta序列转为一行}
>     >
>     > @seq2 = split(//,$seq_line);
>     > foreach $i ( 1 .. ( @seq2 - 1 ) ) {## '..'意思同'~'
>     > if(($i+3)%3 != 0) {
>     > $seq_line2 .= $seq2[$i];
>     > }else{
>     > $seq_line2 .= $seq2[$i]." ";}
>     > }
>     >
>     > print disc ">$desc\n";
>     > print seq ">\n$seq_line\n";
>     > print all ">$desc\n$seq_line2\n";}
>     > }
>     >
>     > close disc; ## 关闭文件
>     > close seq; ## 关闭文件
>     > close all; ## 关闭文件
>     >
>     > }
>     >
>     > closedir(DIR); ## 关闭目录
>     >
>     > 2011/6/23 xiumu <[email protected]
>     <mailto:[email protected]>>
>     >
>     >
>     >
>     >
>     >
>     >
>     >
>     >
>     >
>     > > FASTA是生物信息数据库的常用存储方式,了解FASTA格式的含义,用
>     perl编写程序分离注释行内容,分离蛋白质序列,并转变成氨基酸三字母表示
>     > > 方式。说明使用的perl数据结构和程序的变量转换过程,解释含义。
>     >
>     > > 承认这是个作业・・・・・ 谢谢各位老大了・・・时间比较紧急 明天就交
>     了・・・・・・ 程序于简单越好
>     >
>     > > >1A23:A|PDBID|CHAIN|SEQUENCE
>     > > >:注释行
>     >
>     > >
>     
> AQYEDGKQYTTLEKPVAGAPQVLEFFSFFCPHCYQFEEVLHISDNVKKKLPEGVKMTKYHVNFMGGDLGKDLTQA
>     WAVAM
>     >
>     > >
>     
> ALGVEDKVTVPLFEGVQKTQTIRSASDIRDVFINAGIKGEEYDAAWNSFVVKSLVAQQEKAAADVQLRGVPAMFV
>     NGKYQ
>     > > LNPQGMDTSNMDVFVQQYADTVKYLSEKK
>     > > 数据内容
>     > > >1AAR:B|PDBID|CHAIN|SEQUENCE
>     >
>     > >
>     
> MQIFVKTLTGKTITLEVEPSDTIENVKAKIQDKEGIPPDQQRLIFAGKQLEDGRTLSDYNIQKESTLHLVLRLRG
>     G
>     > > >1AG2:A|PDBID|CHAIN|SEQUENCE
>     >
>     > >
>     
> GLGGYMLGSAMSRPMIHFGNDWEDRYYRENMYRYPNQVYYRPVDQYSNQNNFVHDCVNITIKQHTVTTTTKGENF
>     TETDV
>     > > KMMERVVEQMCVTQYQKESQAYY
>     > > >1AJ3:A|PDBID|CHAIN|SEQUENCE
>     >
>     > >
>     
> AKLNESHRLHQFFRDMDDEESWIKEKKLLVSSEDYGRDLTGVQNLRKKHKRLEAELAAHEPAIQGVLDTGKKLSD
>     DNTIG
>     > > KEEIQQRLAQFVDHWKELKQLAAARGQRLE
>     > > >1ARR:B|PDBID|CHAIN|SEQUENCE
>     > > MKGMSKMPQFNLRWPREVLDLVRKVAEENGRSVNSEIYQRVMESFKKEGRIGA
>     >
>     > > --
>     > > 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers
>     讨论组"论坛。
>     > > 要向此网上论坛发帖,请发送电子邮件至
>     [email protected] <mailto:[email protected]>。
>     > > 要取消订阅此网上论坛,请发送电子邮件至
>     [email protected]
>     <mailto:perlchina%[email protected]>。
>     > > 若有更多问题,请通过http://groups.google.com/group
>     /perlchina?hl=zh-CN访 问此网上论坛。
>     >
>     > --
>     > Best regards,
>     > Liu Jie
>     >
>     > 020-32015312
>     > Guangzhou Institutes of Biomedicine and Health, Chinese Academy
>     of Scienceshttp://www.gibh.cas.cn/ <http://www.gibh.cas.cn/>
>     >
>     > Protein seq.fasta
>     > < 1K查看下载
>     >
>     > 1.pl <http://1.pl>
>     > 2K查看下载
>
>     --
>     您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨
>     论组”论坛。
>     要向此网上论坛发帖,请发送电子邮件至 [email protected]
>     <mailto:[email protected]>。
>     要取消订阅此网上论坛,请发送电子邮件至
>     [email protected]
>     <mailto:perlchina%[email protected]>。
>     若有更多问题,请通过
>     http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
>
>
> -- 
> 您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论组”
> 论坛。
> 要向此网上论坛发帖,请发送电子邮件至 [email protected]。
> 要取消订阅此网上论坛,请发送电子邮件至
> [email protected]。
> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN
> 访问此网上论坛。
这是我写的一个程序,使用者自己加上其他的氨基酸三字母表示形式,经测试无
误,学学Bioperl的模块吧,方便快捷
#!/usr/bin/perl
#===============================================================================
#
# FILE: fasta.pl
#
# USAGE: ./fasta.pl
#
# DESCRIPTION: in response
#
# AUTHOR: ocrack
# CREATED: 06/23/2011 09:23:54 PM
#===============================================================================

use strict;
use warnings;

my $desc;
my $seq = '';

while (<DATA>) {
next, unless (chomp);
if (/^>(.+)/) {
&process_seq($seq), unless ($seq eq '');
$seq = '';
&process_desc($1);
}
else {
$seq .= uc;
}
}
&process_seq($seq);

sub process_desc() {
my @desc = split /\|/, shift;
print "seqence annotation is:\n", join( "\t", @desc ), "\n";

}

sub process_seq() {
my %triples = qw(M Met C Cys);#need to add others triple aa
my $seq = shift;
$seq =~ s/[\s\t]//g;
print "triple aa sequence is:\n";
foreach ( split // , $seq ) {
print $triples{$_};
}
print "\n";

}
__DATA__
>a|b
MCM
>c|d
CCM

-- 
您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论组”论坛。
要向此网上论坛发帖,请发送电子邮件至 [email protected]。
要取消订阅此网上论坛,请发送电子邮件至 [email protected]。
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。

Attachment: fasta.pl
Description: Perl program

回复