2014-11-09 93 views
0

我有一個程序,它將目錄名稱作爲用戶的輸入,並搜索目錄內的所有文件並打印文件的內容。有什麼辦法可以讀取文件的擴展名並讀取指定擴展名的文件的內容嗎?例如,它應該讀取「.txt」格式的文件的內容。Perl找到文件的擴展名

我的代碼是

use strict; 
use warnings; 
use File::Basename; 
#usr/bin/perl 
print "enter a directory name\n"; 
my $dir = <>; 
print "you have entered $dir \n"; 
chomp($dir); 
opendir DIR, $dir or die "cannot open directory $!"; 
while (my $file = readdir(DIR)) { 
    next if ($file =~ m/^\./); 
    my $filepath = "${dir}${file}"; 
    print "$filepath\n"; 
    print " $file \n"; 

    open(my $fh, '<', $filepath) or die "unable to open the $file $!"; 
    while (my $row = <$fh>) { 
     chomp $row; 
     print "$row\n"; 
    } 
} 
+1

您是否在尋找標準的核心Perl模塊[File :: Basename](http://perldoc.perl.org/File/Basename.html)? – 2014-11-09 05:51:13

+0

實際上,當我打開文件時,它包含文件名列表。我必須檢查是否有.txt文件存在與否,這是我的要求 – user2775241 2014-11-09 06:04:09

+0

行;以及File :: Basename提供的哪些設施可以幫助您?什麼是難以理解的手冊頁? – 2014-11-09 06:06:27

回答

1

得到公正的名爲「.txt」文件,你可以使用文件測試操作員(-f:常規文件)和正則表達式。

my @files = grep { -f && /\.txt$/ } readdir $dir; 

否則,你可以看看只是文本文件,使用Perl的-T(ASCII文本文件測試操作)

my @files = grep { -T } readdir $dir; 

否則,你可以嘗試一下,即使這樣的:

my @files = grep {-f} glob("$dir/*.txt"); 
-1

嘗試這個。下面的代碼給出了你的期望。

use warnings; 
use strict; 
print "Enter the directory name: "; 
chomp(my $dir=<>); 
print "Enter the file extension type: "; #only type the file format. like txt rtf 
chomp(my $ext=<>); 
opendir('dir',"$dir"); 
my @files = grep{m/.$ext/g} readdir('dir'); 
foreach my $ech(@files){ 
    open('file',"$dir/$ech"); 
    print <file>; 
} 

我存儲從特定目錄的所有文件來存儲一個數組,我通過使用grep命令得到特定的文件格式。然後打開文件到foreach的條件

0

你在這裏很親密。你有一個主循環看起來像這樣:

while (my $file = readdir(DIR)) { 
    next if $file =~ /^\./; # skip hidden files 

    # do stuff 
} 

看到你跳過循環迭代如果文件名以點開始。這是放置任何其他跳過要求的好地方 - 比如跳過不以'.txt'結尾的文件。

while (my $file = readdir(DIR)) { 
    next if $file =~ /^\./; # skip hidden files 
    next unless $file =~ /\.txt$/i; # skip non-text files 

    # do stuff 
} 

以同樣的方式爲你的原始測試檢查後跟一個字面點(\.)字符串(^)開始,我們現在尋找其次txt和一個點(\.)字符串末尾($)。請注意,我還爲匹配運算符添加了/i選項以使匹配不區分大小寫 - 以便我們匹配「.TXT」以及「.txt」。

值得注意的是,文件的擴展是解決文件內容的一種可怕方式。