2013-10-01 67 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