[問題] 多數字串比對
我有一筆數萬行的文字
需要過濾掉有關鍵字的整行
只印出沒關鍵字的行
寫了簡短程式如下
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
09/14 13:46, 2F
討論串 (同標題文章)
Perl 近期熱門文章
PTT數位生活區 即時熱門文章