Re: [問題] 多數字串比對

看板Perl作者 (PHI)時間14年前 (2010/09/15 10:40), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
#先將想過濾掉的字串放進陣列中 my @exclude = ('馬英酒','陳水匾','好龍兵'); my $reg_str = ''; for(@exclude){$reg_str.=$_ . '|'} $reg_str =~ s/\|$//; #讀取來源文字檔 open READx,"source.txt"; while(<READx>) { if(!/$reg_str/) { print $_; } } close READx; ※ 引述《ForeverT (全家好神)》之銘言: : 我有一筆數萬行的文字 : 需要過濾掉有關鍵字的整行 : 只印出沒關鍵字的行 : 寫了簡短程式如下 : use Encode; : .... : ...... : .......#(前半部開檔案的部分省略) : $data_lines = $#data; : for($i = 0 ; $i <= $data_lines ; $i++) { : if ( : @data[$i] !~ m/馬英酒/ and : @data[$i] !~ m/陳水編/ and : @data[$i] !~ m/好隆兵/ ){ : print Out "@data[$i]\t" ; : } : } : 實際執行無誤可達到我要的效果 : 但如今我要過濾的關鍵字上千 : 用此方法似乎非常佔程式行數 : 應此改用 foreach $exculd(@ALL) { : 如下 : use Encode; : .... : ...... : .......#(前半部開檔案的部分省略) : @exculd = (馬英酒 陳水編 好隆兵 xxx ooo abc .... ); : $data_lines = $#data; : for($i = 0 ; $i <= $data_lines ; $i++) { : foreach $exculd(@ALL) { : if ( : @data[$i] =~ m/$exculd/ ) : { : print Out "@data[$i]\t" }; : } : } : print "DONE"; : 但此方法再執行時出現了編譯的錯誤 : 好像是不能用中文(我把中文用成數字 或英文就可) : 這次第一個問題 : 第二個問題是 : 此方法存在 for 和 foreach兩個迴圈 每判斷一次就執行一次print : 如此 我一行如果 同時都不存在 這上千個關鍵字 他就會把我這行印上千次 : 但我要的是一行比對都無這些人名之後只print一次 : 兩個問題感謝板上高手指點 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.218.146.85
文章代碼(AID): #1Ca38pOH (Perl)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1Ca38pOH (Perl)