Thread Hash mit weiterem Hash ergänzen
(5 answers)
Opened by Stefan_S at 2018-03-06 11:26
Hi,
naja, Du überschreibst die Einträge in %c_artikel für jeden Artikel. Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 # nun erstelle ich einen Hash mit allen Chargenbeständen $c_artikel { 1 } = { c_id => 'Charge_1', c_bestand => 3, }; #### hiermit wird der vorige Eintrag für "1" überschrieben. $c_artikel { 1 } = { c_id => 'Charge_2', c_bestand => 7, }; $c_artikel { 2 } = { c_id => 'Charge_1', c_bestand => 9, }; #### hiermit wird der vorige Eintrag für "2" überschrieben $c_artikel { 2 } = { c_id => 'Charge_2', c_bestand => 11, }; Ein Ansatz wäre, für jeden Artikel die Chargenbestände in einem Array abzulegen. Code (perl): (dl
)
1 2 3 4 5 6 7 # nun erstelle ich einen Hash mit allen Chargenbeständen push @{ $c_artikel{ 1 } }, { c_id => 'Charge_1', c_bestand => 3, }; push @{ $c_artikel{ 1 } }, { c_id => 'Charge_2', c_bestand => 7, }; push @{ $c_artikel{ 2 } }, { c_id => 'Charge_1', c_bestand => 9, }; push @{ $c_artikel{ 2 } }, { c_id => 'Charge_2', c_bestand => 11, }; Insgesamt auf Basis Deines Beispielcodes: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 use strict; use warnings; use Data::Dumper; # zunächst erstelle ich ein Hash mit allen Artikelbeständen my %artikel = ( 1 => { artikel_nr => 'Artikel_1', bestand => 10, }, 2 => { artikel_nr => 'Artikel_2', bestand => 20, }, ); # in Wirklichkeit füttere ich den Hash über eine Schleife, die Werte kommen aus einer Datenbank print "Inhalt von \%artikel:\n"; print Dumper ( \%artikel); print "\n\n"; # die Artikelbestände sind unterteilt in Unterbestände, sog. Chargenbestände; der Gesamtbestand (bestand) ist die Summe der Chargenbestände (c_bestand). Die Chargenbestände lese ich ebenfalls aus der Datenbank ein. Jede Charge ist durch eine ID gekennzeichnet. my %c_artikel; # nun erstelle ich einen Hash mit allen Chargenbeständen push @{ $c_artikel{ 1 } }, { c_id => 'Charge_1', c_bestand => 3, }; push @{ $c_artikel{ 1 } }, { c_id => 'Charge_2', c_bestand => 7, }; push @{ $c_artikel{ 2 } }, { c_id => 'Charge_1', c_bestand => 9, }; push @{ $c_artikel{ 2 } }, { c_id => 'Charge_2', c_bestand => 11, }; # in Wirklichkeit füttere ich den Hash über eine Schleife, die Werte kommen aus einer Datenbank print "Inhalt von \%c_artikel:\n"; print Dumper ( \%c_artikel); print "\n\n"; # alles in %artikel aufnehmen for my $key ( keys %c_artikel ) { $artikel{$key}->{ charge } = $c_artikel{$key}; } { $Data::Dumper::Sortkeys = 1; print "Neuer Inhalt von \%artikel:\n"; print Dumper ( \%artikel); print "\n\n"; } Ergebnis für %artikel: Code: (dl
)
1 Neuer Inhalt von %artikel: meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen! |