是从csv文件的col0和col3创建的,然后我对col3键值进行+ 1的总和。 接下来,我想将所有col0单元格更改为与col3值关联的哈希键。我怎么做? 实质上,如果col3值的变化,col0应该用其密钥对更新。
use strict;
use warnings;
my @arrayfruit;
my %fruits = ();
foreach (<DATA>) {
chomp;
my $line = $_;
my @elements = split( ",", $line );
my $fruit = $elements[0];
my $color = $elements[1];
my $type = $elements[2];
my $nmbr = $elements[3];
%fruits = ( $fruit => $nmbr );
my $new_nmbr = $nmbr + 1;
print "key number = $nmbr <---> value fruit = $fruit \n"
foreach ( keys %fruits );
push @arrayfruit, "$fruit, $color ,$type ,$new_nmbr \n";
}
__DATA__
APPLE,GREEN,FRUIT,1
TURNIP,WHITE,VEG,2
PLUM,RED,FRUIT,3
APPLE,GREEN,FRUIT,1
PLUM,RED,FRUIT,3
ORANGE,ORANGE,FRUIT,4
SPUD,BROWN,VEG,5
PLUM,RED,FRUIT,3
ORANGE,GREEN,FRUIT,4
PLUM,RED,FRUIT,3
ORANGE,ORANGE,FRUIT,4
SPUD,BROWN,VEG,5
PLUM,RED,FRUIT,3
ORANGE,ORANGE,FRUIT,4
Expected Data
TURNIP,GREEN,FRUIT,2
PLUM,WHITE,VEG,3
ORANGE,RED,FRUIT,4
APPLE,GREEN,FRUIT,2
ORANGE,RED,FRUIT,4
SPUD,ORANGE,FRUIT,5
BLANK,BROWN,VEG,6
ORANGE,RED,FRUIT,4
SPUD,GREEN,FRUIT,5
ORANGE,RED,FRUIT,4
SPUD,ORANGE,FRUIT,5
blank,BROWN,VEG,6
ORANGE,RED,FRUIT,4
ORANGE,ORANGE,FRUIT,5
答案 0 :(得分:1)
这似乎可以满足您的要求。哈希不适合将整数与字符串相关联 - 你想要一个数组。您还没有解释当新数字与任何原始值不对应时应该发生什么,所以我使用了BLANK
这是您自己的代码所做的
use strict;
use warnings 'all';
my @fruits;
chomp(my @data = <DATA>);
for ( @data ) {
my @fields = split /,/;
my ($fruit, $n) = @fields[0,3];
$fruits[$n] = $fruit;
}
for ( @data ) {
my @fields = split /,/;
$fields[0] = $fruits[++$fields[3]] // 'BLANK';
print join(',', @fields), "\n";
}
__DATA__
APPLE,GREEN,FRUIT,1
TURNIP,WHITE,VEG,2
PLUM,RED,FRUIT,3
APPLE,GREEN,FRUIT,1
PLUM,RED,FRUIT,3
ORANGE,ORANGE,FRUIT,4
SPUD,BROWN,VEG,5
PLUM,RED,FRUIT,3
ORANGE,GREEN,FRUIT,4
PLUM,RED,FRUIT,3
ORANGE,ORANGE,FRUIT,4
SPUD,BROWN,VEG,5
PLUM,RED,FRUIT,3
ORANGE,ORANGE,FRUIT,4
TURNIP,GREEN,FRUIT,2
PLUM,WHITE,VEG,3
ORANGE,RED,FRUIT,4
TURNIP,GREEN,FRUIT,2
ORANGE,RED,FRUIT,4
SPUD,ORANGE,FRUIT,5
BLANK,BROWN,VEG,6
ORANGE,RED,FRUIT,4
SPUD,GREEN,FRUIT,5
ORANGE,RED,FRUIT,4
SPUD,ORANGE,FRUIT,5
BLANK,BROWN,VEG,6
ORANGE,RED,FRUIT,4
SPUD,ORANGE,FRUIT,5