Zum Inhalt springen

Benutzer:MathiasEllpunkt/Visual Basic 6: Arrays

Aus Wikibooks

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.