Mehrdimensionales Array

Hallo,

ich möchte folgendes Problem lösen und bitte euch um eure Hilfe:

über mehrere ineinandergeschachtelte Schleifen lese ich Daten in einer Hierarchie aus, z.B.

„Station1“
---- | ---- „Tisch1“
---- | ---- „Tisch2“ (über Schleife: in Station1 sind Tisch1 und Tisch2)
---- | ------- | ---- „Teller1“ (Schleife: in Tisch2 gibt es einen Teller1)
„Station2“
---- | ---- „Tisch3“
usw.

Diese Informationen möchte ich nun gerne irgendwo zwischenspeichern (array?) um sie dann mit einer zweiten Liste zu vergleichen. Könnte so aussehen:

„Station1“
---- | ---- „Tisch2“

Es existiert also kein „Tisch1“ mehr. Also muss ich ausgeben, auf „Station1“ existiert kein „Tisch1“.

Vielen Dank schon mal für eure Hilfe - Jobst

Hi!

Ich würde mit die ganze Programmiererei mit den verschachtelten Schleifen ersparen, weil es ziemlich unübersichtlich ist. Mein Vorschlag wäre folgender:

Du nimmst dir ein eindimensionales Feld von Typ String und baust - je nach Bedarf und Anzahl - diesen String in z.B. 3er-Gruppen auf. Dieses Array weist soviele 3erGruppen auf, wie Abstufungen vorhanden sind (bei dir „Station“ + „Tisch“ + „Teller“). Die maximale Anzahl der Elemente ergibt sich aus den Faktoren „Anzahl Stationen“ x „Anzahl Tische“ x „Anzahl Teller“. Besser ist es jedoch hingegen, mittel „ReDim Preserve“ das Array dynamisch zur Laufzeit zu erstellen.

Dein Bsp.:
„Station1“
---- | ---- „Tisch1“
---- | ---- „Tisch2“ (über Schleife: in Station1 sind Tisch1
und Tisch2)
---- | ------- | ---- „Teller1“ (Schleife: in Tisch2 gibt es
einen Teller1)
„Station2“
---- | ---- „Tisch3“
usw.

Station1 ist vorhanden => erste 3er-Gruppe ist „001“
Tisch1 ist in Station1 vorhanden => Erweiterung um „001“
Teller1 ist in Tisch1 nicht vorhanden => Erweiterung um „000“
==> erstes Element des eindimensionalen Textarrays wäre damit „001001000“

Für „Station1“, „Tisch2“ und „Teller1“ ergibt sich „001002001“

Für „Station2“, „Tisch3“ und „Teller1“ (nicht vorhanden) ergibt sich „002003000“

Damit hättest du jetzt ein Array aus drei Textelementen:
Vorgabe(1) = „001001000“
Vorgabe(2) = „001002001“
Vorgabe(3) = „002003000“

Das gleichst du jetzt gegen das zweite Array ab:
Vergleich(1) = „001002001“
Vergleich(2) = „002003000“

For ZaehlerVorgabe = 1 to 3
bGefunden = False
For ZaehlerVergleich = 1 to 2
If Vorgabe(ZaehlerVorgabe) = Vergleich(ZaehlerVergleich) Then
bGefunden = True
Exit For
End If
Next ZaehlerInnen
If Not bGefunden Then
'*** weitere Verarbeitung ***
End If
Next ZaehlerAussen

Ob du 3er-, 2er- oder 5er-Gruppen nimmst, hängt allein von der Anzahl der „Stationen“, „Tische“ und „Teller“ ab. Die Anzahl der Gruppen innerhalb eines Array-Eintrages von der Schachtelungstiefe (jetzt sind es drei Gruppen, nimm noch zwei weitere Hierarchiestufen hinzu, hast du fünf Hierarchiestufen, ohne in der Vergleichsauswertung tiefergestaffelte Arrays benutzen zu müssen (und die Array-Einträge sind mit etwas Cleverness in jedem Texteditor/Debugger lesbar!)

Grüße
Siegfried

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Wäre es nicht einfacher sich sowas vie verkettete Listen über Strukturen zu bauen ? O.k. is Basic - aber man kann in einem Array auch Arrays halten …

Micha

Erst mal vielen Dank. Hab mir deinen Vorschlag nochmal genau durch den Kopf gehen lassen. Ich denke nun, dass ich so nicht weiter komme. Ich weiss von vornhinein nicht, wieviele Stationen, Tische auf den Stationen und Teller es gibt. Zudem gibt es eindeutige Namen zu den Tischen, z.B. „Gerd“ oder „Grau“. Wenn ich jetzt im ersten Array Synonyme einsetze, z.b. „001“ und „002“, kann ich beim Vergleich nicht ausgeben „Gerd“ und „Grau“. Hier müsste ich „Grau“ irgendwo der „002“ zuordnen und zwischenspeichern. Das macht die Sache wieder sehr komplex.

Folgende Situation:
gespeichert im Array1:
001002001 (die Namen sind verloren)

Fülle Array 2:
001003001 (stelle Teller1 auf Tisch3 = „Gelb“)
jetzt kommt aber wieder:
001"Grau"001 (jetzt kann ich nicht Grau die Referenz „002“ geben, oder müsste überprüfen: existiert Grau schon, lese 002, füge 002 hinzu)

Die Idee finde ich wirklich super, aber ich habe es mal getestet und komme leider damit auf keinen grünen Zweig.

Naja, ich versuche auf jeden Fall mal im Moment mein Glück mit einem 2-dimensionalen Array. Weisst du zufällig, wie man z.B. im Array (3 ,4) zu (3, 0) zählt, dabei aber die Inhalte mit einer Variablen überprüft und falls übereinstimmend, die Schleife abbricht?

Besten Dank - Jobst

Hallo Michael,

bin noch Anfänger und kann mir leider nichts unter deinem Vorschlag vorstellen. Hast du vielleicht ein Beispiel?