2013-10-01 57 views
3

我有一个名为ALLEQData的文件夹,其中有100个以'.ndk'结尾的文件,例如'jan05.ndk','feb05.ndk'等。 使用Perl脚本我想打开以'.ndk'结尾的每个文件,读取包含在该文件中的信息并将其放入输出文件中。 之前,我只需要打开一个文件,读它,我用它:使用Perl打开并阅读很多文件,结尾相同

my $filename = "jan76_dec10.ndk"; 
open FILEEQ, "<$filename" 
    or die "can't open '$filename' for reading: $!"; 
close FILEEQ; 
    $icount = 0; 
for ($j=0; $j<@equ_file; $j++) .....etc 

然后阅读过的信息。我可以读取信息并将其分类到我想要的输出中。

我不知道该怎么做,是如何打开所有以'.ndk'结尾的文件,逐个进行阅读和排序,关闭该文件,然后转到下一个文件?

希望这已经够清楚了。

+2

'的perldoc -f glob' –

+1

你都知道,在你的示例代码,打开它后立即关闭文件? – TLP

回答

7

使用glob

my @filenames = glob('*.ndk'); 

for my $filename (@filenames) { 
    open my $fh, '<', $filename 
     or die "can't open '$filename' for reading: $!"; 
    # read/sort file 

    close $fh; 
} 
+0

glob命令有效,但只读取第一个文件,我假设这是因为它不在循环中? Thaks – Kg123

+0

你将它分配给标量变量而不是数组吗? '我的$ filename = glob('*。nbk');'只返回第一个(后面的调用将返回其余的)。 – RobEarl

1

您还可以读取命令行文件名:

while ($#ARGV > -1) { 
    my $filename = shift; 
    open my $fh, '<', $filename 
     or die "can't open $filename for reading: $!"; 
    # ... 
    close $fh; 
} 

然后用通配符表达打电话给你的Perl脚本:

your-script.pl *.ndk 
+0

或者你可以使用菱形运算符'<>' – TLP