看板 Perl 關於我們 聯絡資訊
我有一筆數萬行的文字 需要過濾掉有關鍵字的整行 只印出沒關鍵字的行 寫了簡短程式如下 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
abliou:如果在中文用單引號括下來呢? 09/13 21:14
bluefp:用while讀檔就不用再for一次吧? 09/14 13:46