如何从输入或Perl中的文件中检测到空行?

时间:2014-04-16 07:36:28

标签: perl while-loop

while ($_ ne ' \n')没有检测到输入是否为空行并且在不确定的情况下循环。为什么呢?

5 个答案:

答案 0 :(得分:3)

取决于“空行”的意思。

该行是否不包含换行符以外的字符?

if ($_ eq "\n") # Note, \n only means newline in a double quoted string.

或者

if (/^$/)

该行只包含空格字符

if (/^\s*$/)

但是,如果您反转逻辑以说明该行不包含任何非空格字符,则会更容易

if (! /\S/)

其中一个应该做你想做的事。

答案 1 :(得分:1)

我曾经使用这个正则表达式来跨平台匹配CRLF字节:

/(\r?\n|\r\n?)+$/

所以你可以用这个匹配空行的/^\s*$/组合它:

use strict;
use warnings;
 ...
open my $txtF,"$ARGV[0]";
for my $line (<$txtF>) {
  $line =~ s/(\r?\n|\r\n?)+$//; # strips all CRLF bytes at the end
  if ($line !~ /^\s*$/) { # now check if the line is not empty
    # do stuff
     ...
    # $line .= "\n"; if you need
    next;
  }
}
 ...
close $txtF;
 ...

答案 2 :(得分:1)

你可以在循环中执行如下所示的操作:

if ($_ =~/^$/) {
 ...
}

答案 3 :(得分:0)

这取决于您在文件中的阅读方式。可能会删除换行符。您通常只需将文件读作while ( <> ) { ... }

答案 4 :(得分:0)

像这样的东西

while(<>){
   if(/^$/){
                print "empty line";
        }else{
                print $_;
    }

}

它将在命令行中打开指定为arg0的文件,并打印除空之外的每一行。 &LT;&GT;将每个读取行放在$ _中,这在if语句中隐式使用。