我已经解决了#1,但我还有2个问题。 有人可以帮助我吗?
从目录本地目录中,列出以数字(0..9)开头的所有文件以及哪个文件 扩展名为.song
创建子目录“local dir / selected”,然后在其中复制这些文件中的每一个 为每一行(非空白)编号。
- 醇>
在名为stats.txt的文件中打印出与每个文件有关的以下信息: a)(非空白)线的数量。 b)段落数量。这里的段落是由非空行和。组成的文本块 在文件的开头,文件的结尾或者文本的开头和结尾分隔 一个空白行。 c)段落的平均大小(行数)。 d)如果,是或否,文件中的所有段落都具有相同的长度。 奖金问题: e)检测每个文件中存在的每个押韵。 f)给出押韵线与总行数的比率。
对于#1:
#!/usr/bin/perl
use strict;
use warnings;
my $directory = '/local_dir';
opendir (DIR, $directory) or die $!;
while (my $file = readdir(DIR))
{
# Use a regular expression to find files ending in .song.txt
next unless ($file =~ m/\.song.txt$/);
print "$file\n";
}
closedir(DIR);
exit 0;
答案 0 :(得分:0)
以下是您如何进行第一步和第二步:
#!/usr/bin/env perl
use strict;
use warnings;
use autodie;
my $src_dir = '';
my @files = glob $src_dir . qq([0-9]*.song.txt);
my $dest_dir = 'selected';
mkdir $dest_dir;
for my $file (@files) {
open my $fin, "<", $file;
open my $fout, ">", "$dest_dir/$file";
my $c = 1;
while (<$fin>) {
$_ = $c++ . " $_" unless /^$/;
print $fout $_;
}
}
您可以使用glob
来查找您感兴趣的文件,而不是使用opendir
,从数字[0-9]
开始,到.song.txt
结尾。创建输出目录后,for
循环将遍历这些文件,并在目标目录中创建一个具有相同名称的新文件。 while
循环遍历输入文件的每一行。如果它不是空白,它会在每行的开头添加一个数字,即行的开头不会紧跟行/^$/
的结尾。然后它将该行写入新文件。
至于第三步,我认为如果你遇到困难,你可以自己去做一个新的问题。