我有一個文本文件要在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