2013-08-19 4 views
1

Я не специалист по perl/programmer по профессии, но я столкнулся с некоторыми проблемами, которые можно решить с помощью Perl-скрипта.Поиск строк в нескольких XML-файлах

Я хочу выполнить поиск по нескольким XML-файлам, которые автоматически выводятся сервером. Программное обеспечение называет файлы с отметками времени, из-за которых он заранее знает имена файлов, но я знаю папку, в которой они находятся.

Как я могу выполнить этот поиск кода через каждый файл в папке и найдите определенную строку, например * .xml?

Это код, который я использую, она занимает одно имя файла и функция Строка поиска работы:

#!/usr/bin/perl 
use warnings; 
use strict; 

my $file; 

for $file (@ARGV) { 
# print "\n -----\n"; 
my $lines = slurp($file); 
# print " File contains:\n$lines"; 

print "\n"; 
if ($lines =~ /false/) { 
print " Searched for string 'false' in @ARGV"; 
print "\n"; 
print " String found!\n"; 
} 
    else { 
    print " Searched for string 'false' in @ARGV"; 
    print "\n"; 
    print " No hit!\n"; 
    } 
} 

sub slurp { 

my ($file) = shift; 
my ($f); 
open($f, "<", $file) || die " Can't open file $file, quitting.\n"; 
my $scalar = do { local $/; <$f> }; 
return $scalar; 
} 

exit(0); 

Спасибо!

ответ

0

Используйте свой каталог в качестве первого аргумента в сценарий вместо списка файлов, а затем пройти через каталог:

... 
opendir(DIR, $ARGV[0]) or die "cannot open directory $ARGV[0]: $!\n"; 
my @xmlfiles = grep(/\.xml$/,readdir(DIR)); 
closedir(DIR);  

foreach (@xmlfiles) { 
    slurp($_); 
    ... 
} 
... 

Если его только каталог вы на самом деле в вас хотите, вы можете также использовать glob:

my @xmlfiles = glob("*.xml");

0

Я рекомендую использовать File :: Find :: Rule:

use File::Find::Rule; 

my @files = File::Find::Rule->file()->name('*.xml')->in($seach_dir); 
Смежные вопросы