2014-11-09 95 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”。

值得注意的是,文件的扩展是解决文件内容的一种可怕方式。