使用 csv 文件的单元格的 PERL 密钥对


这是

从 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

似乎可以满足您的要求。哈希不适合将整数与字符串相关联 - 您需要一个数组。你也没有解释当新数字与任何原始值不对应时会发生什么,所以我使用了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

最新更新