Thread Hash mit weiterem Hash ergänzen (5 answers)
Opened by Stefan_S at 2018-03-06 11:26

Stefan_S
 2018-03-06 11:26
#188091 #188091
User since
2014-04-15
30 Artikel
BenutzerIn
[default_avatar]
Servus,

aus unserer Warenwirtschaft lese ich Artikeldaten zur Übergabe an den Online-Shop aus. Zusätzlich sind die Artikelbestände ich sog. Chargen unterteilt. Jede Charge hat einen eigenen (Unter)bestand, die Summe der Chargenbestände ergibt den Bestand.

Mit nachstehendem (vereinfachten) Script versuche ich, die Chargenbestände in den Hash der Bestände aufzunehmen:

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
use strict;
use warnings;

use Data::Dumper;

my ( %artikel, $artikel, $artikel_id, $artikel_nr, $bestand );

# zunächst erstelle ich ein Hash mit allen Artikelbeständen
$artikel { 1 } = {
        artikel_nr              => 'Artikel_1',
        bestand                 => 10,
};
$artikel { 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, $c_artikel, $c_artikel_id, $c_id, $c_bestand );

# nun erstelle ich einen Hash mit allen Chargenbeständen
$c_artikel { 1 } = {
        c_id                    => 'Charge_1',
        c_bestand               => 3,
};
$c_artikel { 1 } = {
        c_id                    => 'Charge_2',
        c_bestand               => 7,
};
$c_artikel { 2 } = {
        c_id                    => 'Charge_1',
        c_bestand               => 9,
};
$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";


Die Ausgabe sieht so aus:

Code: (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
Inhalt von %artikel:
$VAR1 = '1';
$VAR2 = {
'bestand' => 10,
'artikel_nr' => 'Artikel_1'
};
$VAR3 = '2';
$VAR4 = {
'artikel_nr' => 'Artikel_2',
'bestand' => 20
};


Inhalt von %c_artikel:
$VAR1 = '1';
$VAR2 = {
'c_bestand' => 7,
'c_id' => 'Charge_2'
};
$VAR3 = '2';
$VAR4 = {
'c_id' => 'Charge_2',
'c_bestand' => 11
};


Nun meine Probleme:
Bei der Ausgabe, wie ich sie programmiert habe, wird nur jeweils der letzte Datensatz je ID gespeichert, die übrigen Werte werden überschrieben. Ich möchte den Hash '%artikel' um eine weitere Ebene mit den Wertepaaren aus 'c_artikel' erweitern, damit ich all Informationen im Hash %artikel habe.
Die Ausgabe müsste dann ungefähr so aussehen:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
$VAR1 = '1';
$VAR2 = {
'bestand' => 10,
'artikel_nr' => 'Artikel_1'
'chargenbestand' => {
'c_id' => 'Charge_1'
'c_bestand' => 3,
'c_id' => 'Charge_2'
'c_bestand' => 7,
};
};
$VAR3 = '2';
...


Weiß jemand Rat?

Viele Dank und Gruß Stefan 06.03.18

edit 06.03.18/12:21 Rechtschreibkorrektur
Last edited: 2018-03-06 12:21:34 +0100 (CET)

View full thread Hash mit weiterem Hash ergänzen