我有一个文本文件要在Perl中解析,我从文件开头解析它并获取所需的数据。用Perl中的数据阅读文件的最后一行
完成这一切后,我想读取数据文件的最后一行。问题是最后两行是空白的。那么,我如何得到持有任何数据的最后一行。
我有一个文本文件要在Perl中解析,我从文件开头解析它并获取所需的数据。用Perl中的数据阅读文件的最后一行
完成这一切后,我想读取数据文件的最后一行。问题是最后两行是空白的。那么,我如何得到持有任何数据的最后一行。
如果文件比较短,只是从您完成获取数据,保持最后一个非空行阅读:
use autodie ':io';
open(my $fh, '<', 'file_to_read.txt');
# get the data that is needed, then:
my $last_non_blank_line;
while (my $line = readline $fh) {
# choose one of the following two lines, depending what you meant
if ($line =~ /\S/) { $last_non_blank_line = $line } # line isn't all whitespace
# if (line !~ /^$/) { $last_non_blank_line = $line } # line has no characters before the newline
}
如果文件较长,或者你可能已经通过了最后在初始数据的非空行收集步骤,重新打开它,并从阅读正文:
my $backwards = File::ReadBackwards->new('file_to_read.txt');
my $last_non_blank_line;
do {
$last_non_blank_line = $backwards->readline;
} until ! defined $last_non_blank_line || $last_non_blank_line =~ /\S/;
明白了:),谢谢一堆 – fammi 2012-03-29 09:34:01
如果文件很小,我会将它存储在一个数组中,并从结尾读取。如果它很大,请使用File :: ReadBackwards模块。
您可以使用该模块File::ReadBackwards通过以下方式:
use File::ReadBackwards ;
$bw = File::ReadBackwards->new('filepath') or
die "can't read file";
while(defined($log_line = $bw->readline)) {
print $log_line ;
exit 0;
}
如果它们是空白,只需检查$log_line
与\n
;
这里是我的命令行的perl解决方案的变体:
perl -ne 'END {print $last} $last= $_ if /\S/' file.txt
谁投票决定关闭这个问题的人似乎有Perl的一点经验。作为一名Perl人员,我认为第一句话表明了足够的知识以通过最小理解测试。在发布微不足道(至少在Perl)代码中没有意义。 – 2014-01-30 14:32:10