2017-02-09 77 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" 

(失踪)