Perl - 打印下一行

时间:2009-07-03 15:09:19

标签: regex perl newline

我是一名菜鸟用户试图尽快完成我的工作,所以我今天可以准时回家:)

基本上我需要在文本文件中打印下一行空白行。

以下是我到目前为止的情况。它可以完美地定位空白行。现在我只需打印下一行。

    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);

非常感谢:)

5 个答案:

答案 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" }'

根据自己的喜好添加输入文件名。