我一直想知道这一点。如何用前面的数据填充列中的空白,直到达到下一个值?这是一个以逗号分隔的文件示例。
示例数据:
1,2
,2
,2
,2
3,4
期望的输出
1,2
1,2
1,2
1,2
3,4
我知道我会使用while循环,但是什么样的perl命令最合适?有什么想法吗?
答案 0 :(得分:1)
在这些情况下,我建议为每个存储最后定义值的列使用变量。
尝试这样的事情:
my $last_a = 0; # or whatever you want to be the first value
my $last_b = 0;
while(<>) {
chomp;
my ($a, $b) = split /,/, 2;
$last_a = $a unless $a eq '';
$last_b = $b unless $b eq '';
print $last_a . "," . $last_b . "\n";
}
或者,您可以调整unless
测试以更适合您的问题(例如,允许空格等)。此外,$last_a
和$last_b
的初始值可以根据您的需要进行更改。
答案 1 :(得分:1)
只需使用状态变量来保存帖子非空值。
use strict;
use warnings;
use List::Util qw(max);
my @lastval;
while (<DATA>) {
chomp;
my @fields = split ',';
# Autofill empty fields
for my $i ( 0 .. max( $#fields, $#lastval ) ) {
if ( $fields[$i] ne '' ) {
$lastval[$i] = $fields[$i];
} else {
$fields[$i] = $lastval[$i];
}
}
print join( ',', @fields ), "\n";
}
__DATA__
1,2
,2
,2
,2
3,4
输出:
1,2
1,2
1,2
1,2
3,4