作者ForeverT (全家好神)
看板Perl
标题[问题] 多数字串比对
时间Mon Sep 13 15:04:11 2010
我有一笔数万行的文字
需要过滤掉有关键字的整行
只印出没关键字的行
写了简短程式如下
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
1F:推 abliou:如果在中文用单引号括下来呢? 09/13 21:14
2F:→ bluefp:用while读档就不用再for一次吧? 09/14 13:46