【发布时间】:2018-09-27 16:44:52
【问题描述】:
每当发生截断时,我都会从文本文件中输出行号。成功地我得到了大多数截断行的输出。
但是,截断的行输出偏离 2。这是我的代码中发生的事情:
Rain 是一个字符串,位于输入文本文件的第 1 行(见下文)。应用 RegExp s/.{4}\K.*//s 将其截断为 4,Rain 输出即使没有被截断也被截断(Rain 是 4 个字符,无需缩短它)。此外,它发生在 5,s/.{5}\K.*//s。
正确地,代码在被截断 3 或更少时输出被截断的行。
使用s/.{4}\K.*//s 和s/.{5}\K.*//s 时如何显示没有截断?换句话说,当我运行代码截断 4 或 5 时,Rain 不会显示行号的截断输出。
我的文本文件 - weather.txt:
Rain
Snow
这是我的代码:
#!/usr/bin/perl
use strict;
use warnings;
my $input = 'weather.txt';
open my $fhIn, '<', $input or die qq(Unable to open "$input" for input: $!);
my @lines;
while( <$fhIn>) {
chomp(@lines);
push @lines, $. if s/.{5}\K.*//s;
}
my $max = @lines;
my $none = '-';
my $fmt = "%-20s\n";
print sprintf($fmt, "Column 1");
foreach my $i (0..$max-1) {
print sprintf($fmt, ($lines[$i] or $none), ($lines[$i] or $none));
}
【问题讨论】:
标签: perl io truncate truncation