Thread Daten speichern in best. Datenstruktur: Aber wie? (19 answers)
Opened by Kalmuecke at 2007-01-26 12:36

Kalmuecke
 2007-01-26 12:36
#73713 #73713
User since
2006-10-14
68 Artikel
BenutzerIn
[default_avatar]
Hi,

ich habe folgendes Problem und zerbreche mir dabei momentan den Kopf, weil
ich nicht genau weiß wie ich meine Daten in ein Hash/Array speicheren soll,
damit ich später noch geschickt darauf zu greifen kann.

Problemstellung:
Ich habe eine Datei, die nach folgendem Muster aufgebaut ist:
ACHTUNG: Es können unterschiedliche viele Kunden existieren und jeder Kunde
hat unterschiedlich viele Datensätze.

Quote
--- Kundenname: Meyer
DatensatzA 1
DatensatzA 2
DatensatzA 3
DatensatzA 4
DatensatzA 5
DatensatzA 6

--- Kundenname: Müller
DatensatzB 1
DatensatzB 2
DatensatzB 3

--- Kundenname: Schulze
DatensatzC 1
DatensatzC 2
DatensatzC 3
DatensatzC 4
DatensatzC 5
DatensatzC 6
DatensatzC 7


Jetzt möchte ich gerne das ganze in eine Datenstruktur speichern, bei der ich
quasi durch die einzelnen Kundennamen gehen kann und dann die zum Kunden gehörenden
Daten ausgeben kann! Hintergrund: Ich muss die Datensätze später in anderen Funktionen
noch sortieren bearbeiten und dann nach bestimmten Schemen in eine HTML-Datei "drucken".
Und das geht leider nicht, in dem ich immer wieder aus der Datei lese!!!!!

Ich dachte an einen HASH. Der Schlüssel des Hash enthällt den Kundennamen und der Wert
des Hashes enthält die Adresse auf ein Array, wo die Daten zum Kunden liegen!

Hier mein bisheriger Code:

Speichern im Hash:
Code: (dl )
$kundeInfoHash{$kundenName} = [\@kundenDatenArray];


Das scheint aber nicht zu funktionieren, da ich die Datei folgendermaßen speicher und
das Script scheinbar immer wieder die gleiche Adresse vom Array speichert!

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
open(TEMP_R, '<', $tempfile) || die "Error: ";
while (<TEMP_R>)
{
  if ($_ =~ /--- Kundenname:/)
  {
     if ($kundenFound == 1)
     {
        $kundenInfoHash{$kundenName} = \@kundenMesArray; # hier passierts => immer wieder die gleiche Adresse!!!!!!!!
     }
     $kundenName = "";
     $kundenName = $_;
     $kundenName =~ s/\--- kunden:   //; # delete string "--- kunden:   " at begin of line
     $kundenName =~ s/\s\(C\)//;         # delte string " (C)" at end of line
     chomp($kundenName);                 # deletes "\n" at end of line
     $kundenName = substr($kundenName, rindex($kundenName,'\\')+1);
     push(@kundenNamesArray, $kundenName);
     $kundenFound = 1;
  }
  else
  {
     push(@kundenMesArray, $_);
  }
}
close(TEMP_R); # close TEMP-FILE


Problem ist, daß die Anzahl Kunden variieren kann!!!
Das können 10 oder auch 100 sein.
Das gleiche gilt mit den Datensätze eines jeden Kunden.

Hier noch meine Ausgabe um mal auf Datensätze eines Kunden zu zugreifen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
while (my ($key, $value) = each(%kundenInfoHash))
{
  if ($key =~ "Schulze")
  {
     print $value . "\n";
     $kundenMesArrayRef = $value;
  }
}

@kundenMesArray = @$kundenMesArrayRef;

for (my $i = 0; $i < @kundenMesArray; $i++)
{
  print $i . " " . $kundenMesArray[$i] . "\n";
}


Bin für jede Hilfe dankbar!

Gruss

Kalmuecke\n\n

<!--EDIT|Kalmuecke|1169808381-->

View full thread Daten speichern in best. Datenstruktur: Aber wie?