Benutzer:MathiasEllpunkt/Visual Basic 6: Arrays
Arrays
[Bearbeiten]Die Programmierung mit herkömmlichen Variablen stößt bei manchen Problemen sehr schnell an ihre Grenzen. Möchte man zum Beispiel einen kleinen Kalender schreiben, in dem für jeden Tag eine Aufgabe gespeichert werden kann, braucht man eigentlich 31 Variablen (vielleicht auch 28, 29 oder 30). In jeder Variable Tag01, Tag02, etc. wird dabei ein String mit der jeweiligen Tagesaufgabe abgelegt. Der Umgang mit diesen 31 Variablen ist aber schon bei der Deklaration und auch im späteren Gebrauch unschön weil unpraktikabel.
Braucht man viele Variablen, die (wie in dem Beispiel) einem Datentyp angehören, kann man diese auch in einem Array [engl. Feld] speichern. In einem Array verbergen sich hinter dem Variablennamen, nennen wir sie Tag, eine Vielzahl an Einträgen. Der Zugriff auf die einzelnen Einträge erfolgt dabei über den Index, einer ganzzahligen nichtnegativen Zahl, die jeden Eintrag eindeutig identifiziert. Tag(1) bezeichnet dann den zweiten Tag, da die Indexe bei Null anfangen.
Vorstellen kann man sich das Array als eine Liste, in der die Elemente untereinander stehen und jeder Eintrag mit einer Nummer versehen ist..
Da sich jedes Element dieses Arrays über eine Zahl eindeutig identifizieren lässt, nennt man das Array eindimensional.
Deklaration
[Bearbeiten]VB bietet zwei Arten von Arrays: ein Datenfeld oder eine Variable vom Typ Variant mit dem Untertyp Datenfeld. Auf beiden kann mit denselben Methoden zugegriffen werden.
Deklaration als festes Datenfeld
Dim strMitglieder(5) As String '5 gibt den größten Index an, das Array ist 6 Elemente 'groß, da VB immer bei der 0 anfängt zu zählen
Deklaration als variables Datenfeld
Dim strMitglieder() As String 'Hat noch keine Festlegung auf Anzahl der Elemente.
Deklaration als Variable
Dim varMitglieder
Allerdings muss man die Variable noch intialisieren
varMitglieder = Array()
Man kann mit der Funktion Array auch Werte an das Array übergeben, wobei VB dem ersten Element den Index 0 gibt
varMitglieder = Array("Benedikt","Caesar","Dominik","Emil")
Die Werte der Variablen werden mit Indizes ausgelesen:
varMitglieder(1) 'gibt den Wert mit dem Index 1 zurück; beim vorhergehenden 'Beispiel wäre das "Caesar"
Man kann einem Array allerdings nicht nur eine, sondern gleich mehrere Ebenen - Dimensionen genannt - geben. Hierzu muss die neue Dimension nur durch ein Komma getrennt hinter die alte gestellt werden:
Dim strMitglieder(5, 6)
Will man nun auf einen Wert zugreifen, muss man für beide Dimensionen einen Index angeben:
strMitglieder(1, 2) = "Lisa"
Das Array kann jetzt also nicht mehr nur 6 (0-5), sondern 6 (0-5) mal 7 (0-6), also 42 Elemente aufnehmen.
Maximal kann ein Array allerdings nur 60 Dimensionen enthalten.
Man kann einer Dimension nicht nur eine obere sondern auch eine untere Grenze geben. Dies geschieht mittels des Schlüsselwortes To.
Dim strMitglieder(1 to 5, 3 to 6)
Jetzt ist der kleinste Index der ersten Dimension 1 und der kleinste der zweiten Dimension 3. Alle Werte darunter produzieren einen Fehler beim Aufruf.
Alle Grenzen können auch mit Variablen festgelegt werden:
Dim lngUnten as Long Dim lngOben as Long intUnten = 1 intOben = 3 Dim strMitglieder(intUnten To intOben)
erzeugt das selbe Datenfeld wie
Dim strMitglieder(1 To 3)
Methoden zur Verwaltung von Arrays
[Bearbeiten]UBound
[Bearbeiten]Diese Funktion gibt den größten Index einer Dimension eines Arrays zurück.
Dim strName(3, 2 to 4) As String MsgBox UBound(strName)
Dies gibt die Zahl 3 aus. Standardmäßig wird die erste Dimension untersucht. Interessiert man sich für eine andere, muss man dies mit angeben:
Dim strName(3, 2 to 4) As String MsgBox UBound(strName, 2)
Jetzt erhalten sie die Ausgabe 4.
LBound
[Bearbeiten]Diese Funktion gibt den kleinsten Index einer Dimension eines Arrays zurück.
Dim strName(3, 2 to 4) as String MsgBox LBound(strName)
Dies gibt die Zahl 0 aus. Standardmäßig wird die erste Dimension untersucht. Interessiert man sich für eine andere, muss man dies mit angeben:
Dim strName(3, 2 to 4) as String MsgBox LBound(strName, 2)
Jetzt erhalten sie die Ausgabe 2.
ReDim
[Bearbeiten]Mit ReDim kann man die Größe eines Arrays ändern. Hierzu verwendet man folgende Syntax:
ReDim ArrayName(Untergrenze1 To Obergrenze1, Untergrenze2 To Obergrenze2, ...) [As Datentyp]
Das Array muss bei diesem Vorgang zwar bereits deklariert sein, eine Initialisierung ist allerdings nicht erforderlich:
Dim varName as Variant varName = Array() ReDim varName(1 To 5, 0 To 7) as String
Die Angabe As Datentyp ändert den Datentyp des Datenfelde, was aber nur funktioniert, wenn das Array in einer Variant-Variable liegt.
Bei diesem Vorgang geht allerdings der gesamte Inhalt des Arrays verloren. Ist dies nicht erwünscht, kann man es mit dem Schlüsselwort Preserve unterbinden:
ReDim Preserve ArrayName(Untergrenze1 To Obergrenze1, Untergrenze2 To Obergrenze2, ...)
Eine Änderung des Datentyps ist jetzt natürlich nicht mehr möglich.
Des Weiteren kann man anstelle von festen Zahlen auch hier Variablen als Grenzen vergeben:
Dim strName() Dim intGrenze as Long intGrenze = 3 ReDim strName(intGrenze)
Allerdings hat auch ReDim seine Grenzen: Hat man einmal die Anzahl der Dimensionen festgelegt, lässt sich diese nicht mehr verändern. So produziert
Dim strName(1 To 7) ReDim strName(2 To 5, 0 To 4)
einen Fehler.