AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zu: Array of Record

Ein Thema von torud · begonnen am 6. Sep 2003 · letzter Beitrag vom 7. Sep 2003
Antwort Antwort
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#1

Frage zu: Array of Record

  Alt 6. Sep 2003, 09:43
Hallo Leute,

heute habe ich mal eine für mich ziemlich komplizierte Frage!
Ich will einen Shopmaker programmieren und die Struktur der Daten(Artikelgruppen und Artikel) möglichst in einem Array of Record erfassen. Nur komme ich nicht so recht voran. Ich erläutere erst einmal was ich ungefähr brauche.

Ich möchte, dass an oberster Stelle der Shop mit all seinen Eigenschaften steht.
ala:
Shop.Name(string)
Shop.Bildpfad(string)
Shop.Datenpfad(string)
usw.

Darunter möchte ich dann 20 Gruppen anlegen dürfen.
Gruppe.Name(String)

In jeder Gruppe sollten bis zu 100 Artikel anlegbar sein.
Artikel.Name(string)
Artikel.BestellNr(integer)
usw.

In jeder Gruppe sollten aber auch bis zu 20 Untergruppen anlegbar sein.
UGruppe.Name

Und auch dort sollten wieder bis zu 100 Artikel anlegbar sein.

Mehr nicht!?
-)))

Ich habe nun versucht für die Artikel ein Record zu erzeugen:

Delphi-Quellcode:
type rec_Artikel = record
            Bezeichnung: string;
            Bestellnr: string;
            Beschreibung : string;
            Anzahl: string;
            Bildpfad: string;
     end;
Das funktioniert auch schon. Aber mir ist leider unklar, wie man nun das alles irgendwie unter einen Hut bringt, so dass ich dann alles relativ einfach ansprechen kann!???

Vielleicht hat einer einen Vorschlag oder eine Idee, wie ich es anders oder überhaupt lösen kann?
Eigentlich kann es ja nicht so schwer sein, aber schwer genug, dass ich die Lösung nicht finde.

Danke für Eure Mühe
Tom

[edit=Daniel B]Delphi-Tags korrigiert. Mfg, Daniel B[/edit]
Danke
Tom
  Mit Zitat antworten Zitat
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, 16: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
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#3

Re: Frage zu: Array of Record

  Alt 7. Sep 2003, 09:58
Hallo Urs,

ich glaube, Deine Antwort genau das was ich brauchte. Mir ging mal wieder ein kleines Licht auf und ich denke, dass ich Deinen ausgeführten Vorschlag realisieren werde.

Vielen Dank
Tom
Danke
Tom
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#4

Re: Frage zu: Array of Record

  Alt 7. Sep 2003, 10:58
Hi,

ich denke, das wird ein Shop mit Artikeln,Bestellnr. etc. ? Was soll denn da ein Array ? Dann müßte jedesmal, wenn der Rechner eingeschaltet wird, zunachst einmal alles neu erfaßt werden. Also muß es gespeichert werden. Jetzt sind wir beim Thema Datei/Datenbanken. Selbst einer simplen Textdatei ist es egal wieviele Zeilen sie hat. Dasselbe gilt für eine typisierte Datei:
Delphi-Quellcode:
type
  TArtikel = record
  // so wie Du ihn definiert hast
  end;

var ArtikelDatei: FILE of TArtikel;
Auch hierbei ist die Anzahl der Datensätze egal. Die Datenstruktur hat Urs ja schon vorgegeben. Das da ist ein klassisches Beispiel für Dateien. Oder bin ich im falschen Film ?
Gruß
Hansa
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#5

Re: Frage zu: Array of Record

  Alt 7. Sep 2003, 11:30
Hi Hansa,

also der Array, wie nun immer er aufgebaut sein wird, wird als ein Teil des jeweiligen ShopProjektes gespeichert. Also nicht nur der Array, sondern auch noch andere Daten die der User irgendwo eingibt oder wählen kann.

Leider hast Du mich nun etwas verwirrt mit Deinem Post. Ich kann damit leider nicht wirklich viel anfangen, da ich wie schon geschrieben den nicht nur den Array in eine Datei schreiben werde.

Danke trotzdem Tom

ps.: ich könnte aber auch jeden Artikel in einer Art Kommagetrennt in einen Array screiben:

in der Art.:
Shop,Gruppe1,,Artikel,Artbeschreibung,usw.
Shop,Gruppe2,Untergruppe,Artikel,Artikelbeschreibu ng,usw.

wäre das auch ein Ansatz oder ist das eher polnisch ???
Danke
Tom
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#6

Re: Frage zu: Array of Record

  Alt 7. Sep 2003, 12:03
Hi,

im Prinzip geht alles, mit Deinem letzten Vorschlag bist Du jetzt bei der angesprochenen Textdatei gelandet. Natürlich würde auch das gehen, auch ohne Array Du müßtest sie nur zeilenweise durchlaufen. Es geht mir mehr ums Prinzip: Weiß ich die Anzahl irgendwelcher Daten 100% im Voraus, nehme ich ein Array. Weiß ich es nicht genau, nehme ich Zeiger. Aber nur solange es nichts oder nur wenig mit speichern zu tun hat. Ansonsten ist eine Datei/Datenbank angebracht. Wie willst Du das eigentlich speichern ?
Gruß
Hansa
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#7

Re: Frage zu: Array of Record

  Alt 7. Sep 2003, 12:10
Hallo Hansa,

also ich speichere eigentlich alles per Ini-Datei, nur das diese bei mir halt *.shp heissen wird.

Also ich weiss natürlich nicht wieviel Gruppen ein User anlegen wird, ob er Untergruppen nutzen will und wieviele Artikel er in welcher Gruppe anlegt. Somit würde ein statischer Array nie voll ausgenutzt. Wobei: Muss man das ?

Mit dynamschien Arrays kenne ich mich noch weniger aus. Ich weiss nur, dass wohl der Speicherbereich dadurch leiden kann, da der jeweils vorherige Array im Speicher gahlten wird und einfach nur ein neuer Array angelegt wird.

Naja und mit einer Datenbank will ich auch nicht gleich anfangen. Das wäre aus meiner Sich wie mit Kanonen auf Spatzen zu Schiessen. Nehmen wir an, der User will 1000 artikel insgesamt eingeben und das Ganze auf 20 Gruppen und 5 Untergruppen verteilt. Braucht es dazu eine Datenbank? Ich weiss es wirklich nicht. Ich weiss auch noch nicht, wie es nun machen werde. Aber dazu ist ja ein solches Forum da. Informationsbeschaffung und Meinungsaustausch.
Danke
Tom
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#8

Re: Frage zu: Array of Record

  Alt 7. Sep 2003, 12:18
Guck Dir das mal alles rund um das hier in der Hilfe an: reset,rewrite,assign, read, write, seek, close. Das wäre jetzt mein Beispiel mit der typisierten Datei. Und noch was zu den Arrays: ich weiß nicht, ob es nur mir so geht, aber mehrdimensionale Arrays vermeide ich tunlichst. Ich habe einen Fall, da ließ es sich nicht vermeiden und da bin ich froh, wenn ich da nichts rumschrauben muß.
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz