Re: [問題] 之前問過的程式加了新條件~~

看板Perl作者 (真是無聊的...)時間18年前 (2006/11/05 14:24), 編輯推噓1(103)
留言4則, 1人參與, 最新討論串5/5 (看更多)
※ 引述《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

11/05 15:03, , 1F
OKOK~~~真的是沒加到my~可是程式跑完一點東西都沒有
11/05 15:03, 1F

11/05 15:04, , 2F
我的作法是因為每筆紀錄都是固定的 format
11/05 15:04, 2F

11/05 15:05, , 3F
所以先把每一筆紀錄都分析出來,然後再決定是否寫入。
11/05 15:05, 3F

11/05 15:05, , 4F
可是這個程式沒分離出任何東西~~囧
11/05 15:05, 4F
文章代碼(AID): #15JOEr6O (Perl)
文章代碼(AID): #15JOEr6O (Perl)