作者phi61023 (PHI)
看板Perl
标题Re: [问题] 多数字串比对
时间Wed Sep 15 10:40:49 2010
#先将想过滤掉的字串放进阵列中
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