Програмисты на perlе Подкоректируйте пожалуйста скрипт

Pol Fransheski
На сайте с 27.12.2006
Offline
80
583

Есть скрипт для обработки текстовых баз ( вырезает строки с нужным ключевым словом ) К сожалению только по одному. Помогите пожалуйста, подкоректируйте скрипт чтобы вырезал поочерёдно сразу по нескольким ключевым словам.


#!/usr/bin/perl

my %x;

open F, "<qq.txt";
open T, ">tresh.txt";
open Q, ">rezult.txt";

while(my $s = <F>) {
chomp $s;
if($s =~ /ключевое слово/) {
print T "$s\n";
} else {
print Q "$s\n";
}
}
Dreammaker
На сайте с 20.04.2006
Offline
569
#1


#!/usr/bin/perl

my %x;

open F, "<qq.txt";
open T, ">tresh.txt";
open Q, ">rezult.txt";

while(my $s = <F>) {
chomp $s;
if($s =~ /ключевое слово/ || $s =~ /ключевое слово2/ || $s =~ /ключевое слово3/) {
print T "$s\n";
} else {
print Q "$s\n";
}
}

Я на пхп програмлю, но мне кажется по аналогии где-то так должно, или же вместо || поставить OR нужно будет..

AV
На сайте с 18.07.2007
Offline
49
#2

Где-то так:


#!/usr/bin/perl

use strict;

use encoding 'cp1251';
use open ':encoding(cp1251)';

my $input = "in.txt";
my $matched = "match.txt";
my $unMatched = "unmatch.txt";

my @keyWords = qw(мама мыла раму);

if(!open(input, '<', $input))
{
print "ERROR: Can't open file '$input' for reading!\n";
exit(1);
}

if(!open(matched, '>', $matched))
{
print "ERROR: Can't open file '$matched' for writing!\n";
exit(1);
}

if(!open(unMatched, '>', $unMatched))
{
print "ERROR: Can't open file '$unMatched' for writing!\n";
exit(1);
}

while(<input>)
{
my $match = 0;

foreach my $key (@keyWords)
{
if($_ =~ /$key/)
{
$match++;
}
}

if($match != 0)
{
print matched $_;
}
else
{
print unMatched $_;
}
}

close(input);
close(matched);
close(unMatched);

В вышеуказанном примере используется регистро-зависимое сравнение.

cp1251

исправить на используемую кодировку

Pol Fransheski
На сайте с 27.12.2006
Offline
80
#3

Всем Огромное спасибо за помощь.

Заюзал версию Dreammakerа. Работает отлично.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий