[問題] 多數字串比對

看板Perl作者 (全家好神)時間14年前 (2010/09/13 15:04), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串1/2 (看更多)
我有一筆數萬行的文字 需要過濾掉有關鍵字的整行 只印出沒關鍵字的行 寫了簡短程式如下 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: 220.134.24.222

09/13 21:14, , 1F
如果在中文用單引號括下來呢?
09/13 21:14, 1F

09/14 13:46, , 2F
用while讀檔就不用再for一次吧?
09/14 13:46, 2F
文章代碼(AID): #1CZSpjZj (Perl)
討論串 (同標題文章)
文章代碼(AID): #1CZSpjZj (Perl)