填充直到值更改perl

时间:2014-09-03 22:13:59

标签: perl while-loop

我一直想知道这一点。如何用前面的数据填充列中的空白,直到达到下一个值?这是一个以逗号分隔的文件示例。

示例数据:

1,2
,2
,2
,2
3,4

期望的输出

1,2
1,2
1,2
1,2
3,4

我知道我会使用while循环,但是什么样的perl命令最合适?有什么想法吗?

2 个答案:

答案 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