Einzelnen Beitrag anzeigen

urs.liska

Registriert seit: 6. Aug 2003
Ort: Freiburg
195 Beiträge
 
Delphi 6 Professional
 
#2

Re: Frage zu: Array of Record

  Alt 6. Sep 2003, 17:35
Für so ein komplexeres Gebilde wäre es sicher OK, über eine eigene Klasse nachzudenken. Die kann dann indizierte Eigenschaften haben, die Du über:
Shop.Gruppe[18].Untergruppe[5].Artikel[73].Bezeichnung
Ansprechen könntest. Dazu wären allerdings Methoden wie Add, Remove und Eigenschaften wie AnzahlGruppen etc. nötig. Dieser Ansatz ist aufwändiger als ein einfaches Array, aber möglicherweise leichter zu erweitern.

Ein Array könnte aber so aussehen:
TArtikelArray = array[0..19][0..19][0..99] of rec_artikel Das ist ein mehrdimensionales Array, über das Du auf alle Artikel in allen Untergruppen in allen Gruppen (von rechts nach links gelesen) zugreifen kannst.
Der Nachteil ist, dass das komplette Array da ist, unabhängig davon, wieviele Artikel tatsächlich definiert sind.
Mit dynamischen Arrays kannst Du es auch machen, da musst Du aber darauf achten, dass die Anzahl der Einträge nicht überschritten wird.
Das eigentliche Problem bei einem einfachen Array dürfte aber sein, dass Du sagst, Du willst nebeneinander bis zu 100 Artikel und bis zu 20 Untergruppen. Das braucht eine etwas komplexere Gruppierung:
Delphi-Quellcode:
type
  TArtikel = record
  // so wie Du ihn definiert hast
  end;

  TArtikelArray = array of TArtikel;

  TUntergruppe = record
    Name: string;
    // weitere Eigenschaften
    Artikel: TArtikelArray;
  end;

  TUntergruppen = array of TUntergruppe;

  TGruppe = record
    Name: string;
    // weitere Eigenschaften
    Untergruppen: TUntergruppen;
    Artikel: TArtikelArray;

  TGruppen = array of TGruppe;

  TShop = record
     Name: string;
     // weitere Eigenschaften
     Warengruppen: TGruppen;
  end;

var Shop: TShop
Damit kannst Du auf Artikel z.B. so zugreifen:
Delphi-Quellcode:
Shop.Name;
Shop.Warengruppen[i].Name;
Shop.Warengruppen[i].Artikel[j].Bezeichnung;
Shop.Warengruppen[18].Untergruppen[5].Artikel[i].Bezeichnung;
...
with Shop.Warengruppen[3].Untergruppen[9] do
  for i := 0 to High(Artikel) do
  begin
    Output(Artikel[i].Bezeichnung); //'Output' steht für eine Aktion, die Du damit durchführst
    Output(Artikel[i].Bestellnummer);
    ...
  end;
Dabei musst Du noch Prozeduren zum Anfügen neuer Gruppen und Artikel schreiben, die dabei auf Höchstanzahl möglicher Gruppen/Artikel achten.

Viel Erfolg
Urs
  Mit Zitat antworten Zitat