; ################################################################################################ ;## ## ;# Wozu steht der Befehl DIM, was kann man mit ihm machen und wozu kann man ihn gut gebrauchen? # ;## ## ; ################################################################################################ ; Vorraussetzungen: - Standard-Typen (.b, .w, .l, .s) ; - For-Next-Schleife ; - MessageRequester ;Mit dem DIM-Befehl kann man Datenfelder, auch Arrays genannt, erstellen. Das heisst soviel, wie ;dass man mehrere Variablen in einem Datenfeld speichern kann und jede Variable im Feld mit einer ;Nummer gekennzeichnet wird. Das ist besonders praktisch fuer irgendwelche Auflistungen, die immer ;die gleich Anzahl an Zeilen haben. ; ; Beispiel eines Einkaufzettels: ; - Butter ; - Mehl ; - Zucker ; - Bananen ; - Sahne ; ;Statt jede Zeile in eine neue Variable mit je einem andere Namen zu speichern (a$ = "Butter", ;b$ = "Mehl", ...), hat man jetzt mit DIM die Moeglichkeit, die einzelnen produkte nummeriert in ;ein Array zu speichern. Nach dem "Einkaufzettel"-Beispiel, wuerde das nun folgendermassen aussehen: ; Dim Einkaufzettel.s(4) ;Hier erstellen wir zunaechst ein Array mit dem Namen ;Einkaufzettel und dem Typ String (?.s). Die Zahl in den ;Klammern bestimmt die Anzahl der Eintraege. Weil die ;Nummerierung bei Null anfaengt, haben wir mit der 4 in ;den Klammern eine Eintrageanzahl von 5. Einkaufzettel(0) = "Butter" ;Jetzt weisen wir dem Array die einzelnen Eintraege zu, indem Einkaufzettel(1) = "Mehl" ;wir den Array-Namen, gefolgt von dem Index (Eintrag-Nummer), Einkaufzettel(2) = "Zucker" ;der in eine Klammer angegeben wird, auf die linke Seite Einkaufzettel(3) = "Bananen" ;und - in diesem Falle - die Zeichenkette (String) auf die Einkaufzettel(4) = "Sahne" ;rechte Seite des "Ist-Gleich's" setzen. Logisch. Eben genau ;wie bei allen Variablenzuweisungen. For Index.b = 0 To 4 MessageRequester("Einkaufsliste", Einkaufzettel(Index.b), 0) Next ;Anschliessend koennen wir es mit einer einfachen For-Next- ;Schleife realisieren, dass uns jedes Einkaufs-Produkt, also ;jeder String, nacheinander im Fenster angezeigt wird. Das ;ist viel einfacher, als einzelne verschiedennamige Variablen ;zu benutzen. ;Kommen wir jetzt zu einem weiteren Verwendungzweck des DIM-Befehl's: ;Soeben haben wir ein eindimensionales Array kennengelernt, also ein Datenfeld, dass aus beliebig ;vielen, aber, wenn es einmal bestimmt ist, immer gleichvielen "Zeilen" bzw. Feldern besteht. Als ;naechstes gehen wir zu einem zwei-dimensionalen bis zum mehr-dimensionalen Array ueber. Ausserdem ;beschraenken wir uns im Folgenden auf die Begriffe Array (Datenfeld), Index (Eintrag-Nummer) und ;String (Zeichenkette) und denken immer daran, dass der Index 0 immer mitgezehlt wird. ;Um jetzt endlich zum zwei-dimensionalen Array zu kommen, nehmen wir als Beispiel eine Tabelle mit ;6 Zeilen und 5 Spalten, einen Stundenplan: (vereinfachte Darstellung) ; ;| Montag | Dienstag | Mittwoch | Donnerstag | Freitag | ;------------------------------------------------------------------ ;| Deutsch | Latein | Geschichte | Politik | Mathe | ;| Latein | ... | ... | ... | ... | ;... ; ;Um diesen Stundenplan nun in einem einzigen Array speichern zu koennen, ohne etwa 5 Arrays - fuer ;jeden Tag eins zu erstellen - , gehen wir das so an: Dim Stundenplan.s(4, 5) ;Zuallererst erstellen wir ein zwei-dimensionales Array ;mit 5 mal 6 Feldern, womit der erste Index fuer die Wochen- ;tage steht (0 = Montag, ...) und der zweite Index fuer die ;Stunden (0 = 1.Stunde, ...) Stundenplan(0, 0) = "Deutsch" ;Im 1. Index steht eine Null, also ist damit der Montag ;gemeint. Die Null im 2. Index steht fuer die erste Stunde. ;Und dieser Position im Array speichern wir nun den String, ;der das Fach beschreibt, in dem Fall Deutsch. Stundenplan(1, 0) = "Latein" ;Weiter gehts... Stundenplan(2, 0) = "Geschichte" Stundenplan(3, 0) = "Politik" Stundenplan(4, 0) = "Mathe" ;Da wir jetzt bei Freitag angekommen sind, springen wir im Stundenplan(0, 1) = "Latein" ;1. Index um eins weiter, auf die 2. Stunde, und tragen dort ;alle Faecher der 2. Stunde, wiederum von Montag bis Freitag ;ein. Stundenplan(1, 1) = "u.s.w." ;Jetzt, wo ihr - hoffentlich - kapiert habt, wie es weiter ;gehen wird, koenne wir im Anschluss das Array wieder mit einer ;For-Next-Schleife auslesen For Stunde.b = 0 To 5 For Tag.b = 0 To 4 If MessageRequester("Tag: " + Str(Tag) + ", Stunde: " + Str(Stunde), "Fach: " + Stundenplan(Tag, Stunde), 1) = 2 : End : EndIf Next ;Damit es etwas verstaendlicher ist, schreiben wir in die Titel- Next ;Leiste des MessageRequester-Fensters den Tag als Index des Arrays ;und die Stunde als Index des Arrays. ;Und damit wir jetzt nicht die 30 (5 Tage * 6 Stunden) Faecher ;durchklicken muessen, bauen wir noch einen Abbrechen-Button ein, ;um das Programm schnell beenden zu koennen. ;Natuerlich koennte man dieses Verfahren jetzt noch weiter treiben, indem man fr jedes Schuljahr seinen ;Stundenplan in einem Array abspeichern wurde. Dazu braeuchte man allerdings ein drei-dimensionales Array: ;Dim Stundenplan(Jahre - 1, TageProWoche - 1, StundenProTag, - 1). Und man kann dies eigentlich ewig weiter- ;fuehren. Ich hab zwar noch nicht ausprobiert, ob man mehr als 32 Dimensionen machen kann, aber ich denke, ;dass 32 Dimensionen fuer jedes Programm ausreichen werden. ;Und das war es auch schon mit dem DIM-Befehl und wozu man ihn gebrauchen kann. ; ExecutableFormat=Windows