我需要创建Perl代码,它允许计算文本文件中的段落。我试过这个并不起作用:
open(READFILE, "<$filename")
or die "could not open file \"$filename\":$!";
$paragraphs = 0;
my($c);
while($c = getc(READFILE))
{
if($C ne"\n")
{
$paragraphs++;
}
}
close(READFILE);
print("Paragraphs: $paragraphs\n");
答案 0 :(得分:6)
请参阅perlfaq5: How can I read in a file by paragraphs?
local $/ = ''; # enable paragraph mode
open my $fh, '<', $file or die "can't open $file: $!";
1 while <$fh>;
my $count = $.;
答案 1 :(得分:1)
在http://www.perl.org/books/beginning-perl/查看Beginning Perl一书。特别是,以下章节将为您提供帮助:http://docs.google.com/viewer?url=http%3A%2F%2Fblob.perl.org%2Fbooks%2Fbeginning-perl%2F3145_Chap06.pdf
答案 2 :(得分:-1)
如果你用双换行符(“\ n \ n”)确定段落,那么这样就可以了:
open READFILE, "<$filename"
or die "cannot open file `$filename' for reading: $!";
my @paragraphs;
{local $/; @paragraphs = split "\n\n", <READFILE>} # slurp-split
my $num_paragraphs = scalar @paragraphs;
__END__
否则,只需更改代码中的“\ n \ n”即可使用您自己的段落分隔符。使用模式\n{2,}
甚至可能是个好主意,以防万一有人对输入密钥感到疯狂。
如果您担心内存消耗,那么您可能想要做这样的事情(对于难以阅读的代码感到抱歉):
my $num_paragraphs;
{local $/; $num_paragraphs = @{[ <READFILE> =~ /\n\n/g ]} + 1}
但是,如果您想继续使用自己的代码,可以将if($C ne"\n")
更改为if($c eq "\n")
。