我是一名菜鸟用户试图尽快完成我的工作,所以我今天可以准时回家:)
基本上我需要在文本文件中打印下一行空白行。
以下是我到目前为止的情况。它可以完美地定位空白行。现在我只需打印下一行。
open (FOUT, '>>result.txt');
die "File is not available" unless (@ARGV ==1);
open (FIN, $ARGV[0]) or die "Cannot open $ARGV[0]: $!\n";
@rawData=<FIN>;
$count = 0;
foreach $LineVar (@rawData)
{
if($_ = ~/^\s*$/)
{
print "blank line \n";
#I need something HERE!!
}
print "$count \n";
$count++;
}
close (FOUT);
close (FIN);
非常感谢:)
答案 0 :(得分:5)
open (FOUT, '>>result.txt');
die "File is not available" unless (@ARGV ==1);
open (FIN, $ARGV[0]) or die "Cannot open $ARGV[0]: $!\n";
$count = 0;
while(<FIN>)
{
if($_ = ~/^\s*$/)
{
print "blank line \n";
count++;
<FIN>;
print $_;
}
print "$count \n";
$count++;
}
close (FOUT);
close (FIN);
不将整个文件读入@rawData会节省内存,尤其是在大文件的情况下......
<FIN>
作为命令将下一行读入$ _
print ;
本身就是print $_;
的同义词(虽然这次我选择了更明确的变体......
答案 1 :(得分:2)
阐述Ron Savage的解决方案:
foreach $LineVar (@rawData)
{
if ( $lastLineWasBlank )
{
print $LineVar;
$lastLineWasBlank = 0;
}
if($LineVar =~ /^\s*$/)
{
print "blank line \n";
#I need something HERE!!
$lastLineWasBlank = 1;
}
print "$count \n";
$count++;
}
答案 2 :(得分:1)
我会这样,但可能有其他方法可以做到:
for ( my $i = 0 ; $i < @rawData ; $i++ ){
if ( $rawData[$i] =~ /^\s*$/ ){
print $rawData[$i + 1] ; ## plus check this is not null
}
}
学家
答案 3 :(得分:0)
添加一个像$ lastLineWasBlank这样的变量,并在每个循环结束时设置它。
if ( $lastLineWasBlank )
{
print "blank line\n" . $LineVar;
}
这样的事情。 : - )
答案 4 :(得分:0)
sh> perl -ne 'if ($b) { print }; if ($b = !/\S/) { ++$c }; END { print $c,"\n" }'
根据自己的喜好添加输入文件名。