Re: [問題] 多數字串比對
#先將想過濾掉的字串放進陣列中
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
討論串 (同標題文章)
Perl 近期熱門文章
PTT數位生活區 即時熱門文章