作者gohiei (真是无聊的...)
看板perl
标题Re: [问题] 之前问过的程式加了新条件~~
时间Sun Nov 5 14:25:59 2006
※ 引述《akillerbear (我是歹人雄大)》之铭言:
: 上面是小弟之前问过的问题~~
: 就是在每个"//"为结尾的档案做切割输出
: 後来因为这样输出後档案太多了,一个gbvrl1.seq就可以输出7万多笔
: 如此一来我若是先输出再把我要的档案去grep出来就太费时了
: 所以我想说能在文件档中"ORGANISM"栏位里有提及的名称如"Enterovirus"等
: 才作输出如此一来就可以节省不少时间了
: 请问有比较好的做法吗~~THX
: 小弟自解一下阿~~
: /////////////////////////
: #!/usr/bin/perl
: #serch and find what I want
: use strict;
: my $content;
: my $accession;
: my $record;
: my $q;
: my $REPORT_FILE = "report.txt";
: my $fasta_file = $ARGV[0] || 'gbvrl1.seq';
: unless ( -e $fasta_file ) {
: die "$0: ERROR: missing file: $fasta_file";
: }
: open( IN, $fasta_file ) or die "$0: ERROR: $fasta_file: $!";
: while (<IN>) {
: $content .= $_;
: }
: close(IN);
: my @records=split("//",$content);
: foreach $record (@records) {
: @e=split "\n", $record;
^^^
我看了一下,这里好像是第一次出现,
要不要加个 my 给它呢 ?
: my $towrite=0;
: foreach $q (@e) {
: $accession = $1 if ( $q =~ /^ACCESSION\s+(\S+)/ );
: if ( $q =~/^ORGANISM\s+(\S+)/ && $1 =~/enterovirus/) { $towrite=1; last; }
: }
: if ($towrite == 1 ) {
: open OUT, "> $accession";
: print OUT $record;
: print OUT "//\n"; ## put // back
: close OUT;
: # print $p;
: }
: }
: /////////////////////////////////
: 可是执行後会有
: Global symbol "@e" requires explicit package name at fi.pl line 28.
: Global symbol "@e" requires explicit package name at fi.pl line 30.
: Execution of fi.pl aborted due to compilation errors.
: 我这个有定义过了啊@@ 真奇怪~~~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 210.240.172.81
1F:推 akillerbear:OKOK~~~真的是没加到my~可是程式跑完一点东西都没有 11/05 15:03
2F:→ akillerbear:我的作法是因为每笔纪录都是固定的 format 11/05 15:04
3F:→ akillerbear:所以先把每一笔纪录都分析出来,然後再决定是否写入。 11/05 15:05
4F:→ akillerbear:可是这个程式没分离出任何东西~~囧 11/05 15:05