2017-02-09 75 views
0

點到Perl的非常新的使用grep命令,如何在文件處理

我的要求是讀一個目錄,搜索或匹配特定的文件,並處理讀取文件

我知道它很容易給你人,但我不能這樣做,所以請給一些指導來完成這個

我有下面的代碼上市。

{

#!/usr/bin/perl 
use strict; 
use warnings; 
use File::stat; 
use File::Copy; 
use Sys::Hostname; 

$source_raw_directory = "/dfactory/data/raw/in/"; 

opendir (DIR,$source_raw_directory) 

#foreach @array (grep(/hiea_._DeletedPatient\.txt$/,readdir(DIR))); 
@array = grep (/\hiea_._DeletedPatient\.txt$/,readdir(DIR)) 
    #print "@array"; 
closedir(DIR); 

} 我得到錯誤象下面

「陣列發現其中操作者預期在Deleted_Patient.pl管線45,在管線 的端部(前缺少運營商?) 語法錯誤at Deleted_Patient.pl line 45,near「)

#foreach @array (grep(/hiea_._DeletedPatient\.txt$/,readdir(DIR))); 
    @array " 

Deleted_Patient.pl have compila重刑錯誤」

感謝 PANDIA

回答

-1

對於第一,使用谷歌和官方文件POD,如例 http://perldoc.perl.org/functions/readdir.html

而且你的代碼與這工作:

$source_raw_directory = "/dfactory/data/raw/in/"; 

opendir(my $dh, $source_raw_directory) || die "Can't opendir $source_raw_directory: $!"; 
my @dots = grep { /\hiea_._DeletedPatient\.txt$/ } readdir($dh); 
closedir $dh; 
+0

而且,如果您使用「strict」,則必須爲所有變量設置通知(我的@array = ...) – Andrey

+0

非常感謝你@andrey –

+0

您好我試過,但我需要 –

1

我不會。我覺得opendirgrep笨重的成語使用的時候可以glob代替。

foreach my $filename (glob ("$source_raw_directory/*iea_._DeletedPatient.txt")) { 
    print $filename,"\n"; 
} 

注 - glob擴展路徑,因此您將擁有完整的路徑名稱。我通常認爲這是一個優點,因爲這意味着您永遠不會忘記將路徑名稱與open調用包含在一起。

0

你說你的錯誤包括「(缺少操作過嗎?)」。這並不是特別清楚,但它似乎意味着錯誤出現在錯誤引用的代碼之前。 @array前行是註釋,所以這是不太可能的問題,所以讓我們來看看之前的行。

opendir (DIR,$source_raw_directory) 

我認爲這很明顯是什麼問題。行尾沒有任何評論。

我測試使用Perl 5.22.2,賦予更加清晰的錯誤信息代碼:

發現

陣列,其中運營商預計將在測試線13,接近「)

#foreach @array (grep(/hiea_._DeletedPatient\.txt$/,readdir(DIR))); 
@array" 

(失蹤)