Je crée un script de pré-traitement qui va lire dans un fichier csv, regardez deux champs (P_ID et don_date), concaténer les deux ensemble pour créer une clé pour mon hachage, puis conservez la ligne (scindée en tableau) comme valeur pour la clé. Si une autre ligne du fichier a le même p_id et don_date (qui correspondent à ma clé de hachage), je veux prendre les autres valeurs que vous voyez dans le code et les ajouter aux valeurs de l'entrée de hachage existante. Je fais quelques tests, mais je suis un peu confus quant à la façon dont le référencement/décréférencement et tout ce qui fonctionne dans Perl (je suis un gars Python), de sorte que chaque ligne aura une valeur unique P_ID/Don_Date, ou bien il sera enroulé dans un existant.J'ai du mal à obtenir des valeurs dans un hachage
my @lineFields =();
my %rollUpHash =();
# Open file and loop through lines
#foreach my $line (<INFH>)
while(my $line = <INFH>)
{
# chomp($line);
# print STDERR "New line in file\n";
# <STDIN>;
@lineFields = split(/,/, $line);
# Pull out pertinent values for possible roll-up into a total
my $p_id = $lineFields[18];
my $don_date = $lineFields[19];
my $nd_amt = $lineFields[14];
my $deduct_amt = $lineFields[15];
my $nondeduct_ytd = $lineFields[16];
my $deduct_ytd = $lineFields[17];
my $amount = $lineFields[24];
my $anonymous = $lineFields[26];
my $int_code_ex0003 = $lineFields[39];
my $int_code_ex0006 = $lineFields[40];
my $int_code_ex0028 = $lineFields[41];
my $sumDeduct_NonDeduct_ytd = $deduct_ytd + $nondeduct_ytd;
my $hashKey = $p_id . $don_date;
# say "P_ID is $p_id\nDon_Date is $don_date\nND_Amt is $nd_amt\nDeduct_Amt is $deduct_amt\nNonDeduct_YTD is $nondeduct_ytd\nDeduct_YTD is $deduct_ytd\nAmount is $amount\nAnonymous is $anonymous\n0003 is $int_code_ex0003\n0006 is $int_code_ex0006\n0028 is $int_code_ex0028";
# say "hashKey is $hashKey";
# say "$sumDeduct_NonDeduct_ytd";
if (exists($rollUpHash{$hashKey}))
{
say("Same key found, summing up!")
$rollUpHash{$hashKey}[14] += $lineFields[14];
$rollUpHash{$hashKey}[15] += $lineFields[15];
$rollUpHash{$hashKey}[16] += $lineFields[16];
$rollUpHash{$hashKey}[17] += $lineFields[17];
$rollUpHash{$hashKey}[24] += $lineFields[24];
push @{$rollUpHash{$hashKey}}, $sumDeduct_NonDeduct_ytd;
# print %rollUpHash;
}
else
{
$rollUpHash{$hashKey} = \@lineFields;
}
foreach my $key (keys %rollUpHash)
{
print OUTFH "$key is @{$rollUpHash{$key}}";
}
Voici trois lignes de données d'entrée: frotté
152099-00001,,100,100,400,100,175,100,700,200,200,500,0,0,0,300,0,2575,105666,10/28/14,197800,23764962,"Jefferson,Mark",300,1004,N,N,N,D,Mike and Bonnie,Mike and Bonnie Gregorovitch,715 81st St NE,,,Central,IL,52402-7256,UNITED STATES,,,,,Y,[email protected],,(888) 888-8888,"Jefferson,Mark",2222B,BASIC,,
342029-00015,,200,0,400,200,200,200,200,200,200,200,0,0,0,200,0,2000,3184444,09/27/14,197800,40949,"Macrow,Gregory",100,1004,N,N,N,D,John and Amber, John and Amber Meadows,PO Box 706,,,Logan,MD,01111-0704,UNITED STATES,,,,,Y,[email protected],,(999) 999-9999,"Macrow,Gregory",2222B,BASIC,,
342029-00014,,200,0,400,200,200,200,200,200,200,200,0,0,0,200,0,2000,3184444,09/27/14,197800,22145,"Bartholomew,Vincent",100,1004,N,N,N,D,John and Amber, John and Amber Meadows,PO Box 706,,,Logan,MD,01111-0704,UNITED STATES,,,,,Y,[email protected],,(999) 999-9999,"Bartholomew,Vincent",2222B,BASIC,,
Toute aide de tri ce problème en serait très apprécié!
Quel est le problème/question? Pouvez-vous montrer 3 lignes d'entrée? – choroba
La seule chose étrange que je vois est 'push @ {$ rollUpHash {$ hashKey}}, $ sumDeduct_NonDeduct_ytd;' – ikegami
@choroba il a été ajouté à l'OP. – flybonzai