Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

Arrayfunktionen

Geschrieben von: Stefan Gründhammer
Kategorie: ASP Grundlagen

This printed page brought to you by AlphaSierraPapa

In diesem Artikel werden Sie die wichtigsten Array-Funktionen, wie z.B. Split() und Join(), kennen- und verwenden lernen. Für Ihr Grundlagenwissen gibt es bereits einen Artikel Das Array, unendliche Weiten? den Sie vielleicht vorher lesen sollten.

Allgemeines zu Array-Funktionen

VBScript bietet Ihnen eine relativ große Zahl an Array-Funktionen, welche Ihnen die Arbeit mit Arrays erheblich erleichtern können. Auf folgende Funktionen werde ich im Laufe dieses Artikels näher eingehen:

Im folgenden Abschnitt werde ich nun genauer auf die einzelnen Funktionen eingehen und diese mit der Hilfe von einigen kleinen Beispielen beschreiben.

ReDim-Anweisung

Die ReDim-Anweisung wurde im Artikel Das Array, unendliche Weiten? bereits ausführlichst erklärt. Die Redim-Anweisung wird zum verändern der Größe von dynamischen Arrays verwendet. Mit dieser Anweisung bestimmen Sie die Größe Ihres Arrays. Sie können anstatt einer Zahl auch eine Variable als Größenangabe benutzen, so können Sie die Größe Ihres Arrays dann wirklich dynamisch verändern. Aber aufgepasst: Wenn Sie die Größe des Arrays mittels ReDim-Anweisung verändern, gehen alle vorher eingegebenen Elemente verloren. Diesen Verlust können Sie mit Hilfe des Schlüsselwortes Preserve vermeiden. Wenn Sie das Array verkleinern gehen Ihnen trotzdem Elemente verloren (das sollte aber klar sein).

Ich werde Ihnen jetzt kurz die Syntax der Redim-Anweisung anhand einiger Codezeilen erklären.

 1: <% @LANGUAGE = VBScript %>
 2: <% Option Explicit
 3: Dim arrDyn(), x, i
 4: i = 2
 5: %>
 6: Dynamisches Array <br>
 7: <%
 8: ReDim arrDyn(i)
 9: arrDyn(0)= 1
10: arrDyn(1)= 2
11: arrDyn(2)= 3
12: For x = 0 to UBound(arrDyn)
13: Response.Write arrDyn(x) & "<br>"
14: Next
15: %>
16: <br>Mit Preserve <br>
17: <%
18: ReDim Preserve arrDyn(3)
19: arrDyn(3)= 4
20: For x = 0 to UBound(arrDyn)
21: Response.Write arrDyn(x) & "<br>"
22: Next
23: %>
24: <br>Ohne Preserve <br>
25: <%
26: ReDim arrDyn(4)
27: arrDyn(4) = 5
28: For x = 0 to UBound(arrDyn)
29: Response.Write arrDyn(x) & "<br>"
30: Next
31: %>

Wenn Sie dieses Beispiel ausprobieren sehen Sie die Auswirkung der ReDim-Anweisung mit und ohne Preserve sehr klar. Ohne Preserve werden die Inhalte der ersten vier Elemente gelöscht und nur das fünfte hat einen Wert. Aber auch das kann manchmal von Nutzen sein.

Array-Funktion

Die Array-Funktion wurde auch schon im obengenannten Artikel ziehmlich genau beschrieben, deshalb gehe ich hier nur mehr sehr sparsam mit Erklärungen um. Die Syntax ist wie folgt: Array(Arguemntenliste). Diese Argumenteliste sind Werte, welche durch Komma getrennt sind, und dann die Elemente des Arrays bilden.

 1: <% @LANGUAGE = VBScript %>
 2: <% Option Explicit %>
 3: <% Dim arrTest, i
 4:    arrTest = Array("a","b","c","d","e")
 5:       For i = 0 to UBound(arrTest)
 6:           Response.Write arrTest(i)& "<br>"
 7:       Next
 8: %>

In Zeile 3 deklariere ich eine Variable arrTest. Diese ist bis dahin noch kein Array, sondern eine einfache Variable mit dazugehörigem Speicherplatz. In Zeile 4 kommt die Array-Funktion zur Anwendung. Hier wird nun aus der allgemeinen Variable arrTest ein eindimensionales null-basierendes Array arrTest(4) mit fünf Elementen.

In den Zeilen 5 bis 7 schreibe ich das Array aus. Ich habe ein Beipiel mit mehreren Array-Funktionen (Array(), Split(), Join()) für Sie unter dem Namen arrayfunktion.asp bereitgelegt.

LBound-Funktion

Die LBound-Funktion gibt Ihnen den kleinsten Index der gesuchten Dimension Ihres Arrays zurück (sollte null sein). In Kombination mit der UBound-Funktion können Sie die Größe eines Ihnen unbekannten Arrays feststellen.

Die LBound-Funktion hat folgende Syntax: LBound(ArrayName, Dimension). Sie müssen die Dimension nicht unbedingt anführen, es reicht auch wenn Sie LBound(ArrayName) schreiben, wenn Sie keine bestimmte Dimension brauchen. Der Rückgabewert der LBound-Funktion ist eine Zahl.

UBound-Funktion

Im Gegensatz zur LBound-Funktion liefert die UBound-Funktion den größten Index Ihres Arrays zurück. Ich habe diese Funktion beinahe in jedem Beispiel des heutigen Artikels verwendet um alle Elemente eines Arrays auszuschreiben.

 1: For i = 0 to UBound(arrTrick)
 2:     Response.Write arrTrick(i)& "<br> "
 3: Next

Die Syntax ist dieselbe wie bei der LBound-Funktion, und auch hier ist der Rückgabewert eine Zahl. Wenn Sie z.B. die Variable arrTrick(3,7,1) haben, bekommen Sie bei UBound(arrTrick,2) den Wert 7.

IsArray-Funktion

Die IsArray-Funktion gibt Ihnen entweder True oder False zurück und erlaubt Ihnen somit sicher zu sein, daß es sich bei der zu prüfenden Variable um ein Array handelt oder nicht. Die Syntax dieser Funktion ist wieder sehr einfach: IsArray(arrTrick), in unserem Fall wird True zurückgegeben.

Split-Function

Die Split-Funktion liefert ein nullbasiertes eindimensionales Array zurück, in welches die Segmente der Split-Funktion als Elemente gespeichert werden. Die Syntax der Split-Funktion ist etwas komplizierter, mit dieser Funktion kann man aber einiges machen:

Split(Ausdruck,Begrenzungszeichen,Zähler,Vergleich)

Begrenzungszeichen, Zähler und Vergleich sind optional. Auch hierzu gibt es wieder ein kleines Beispiel:

 1: strTestIP = "192.168.2.21"
 2: arrTestIP = Split(strTestIP, ".", -1, 0)
 3: Response.Write IsArray(arrTestIP) & "<br>"
 4: For x = 0 to UBound(arrTestIP)
 5:     Response.Write arrTestIP(x) & "<br>"
 6: Next

Hier sind noch einige Erklärungen zur Syntax: Das Begrenzungszeichen müssen Sie zwischen zwei Anführungszeichen setzen (in unserem Fall "."). Wenn Sie -1 für den Zähler einsetzen, werden alle Teilstrings zurückgeliefert. Setzen Sie z.B. 2 in den Zähler werden nur zwei Teilstrings gemacht. Und mit Vergleich können Sie auf binäre Gleichheit (0 "Null eingeben") oder Textgleichheit (1 "Eins eingeben") vergleichen. Natürlich geht das auch in die andere Richtung und zwar mittels Join-Funktion.

Noch einen Tip zum IP-Adressen-Beispiel oben. Das Aufsplitten der IP-Adresse kann sich bei oftmaligem Eintrag von IP-Adressen in eine Datenbank als sehr nützlich erweisen, Sie sparen nämlich bei jedem Eintrag in die Datenbank 11 Byte. Das ist doch ein guter Grund für diese Prozedur, oder? Wie füge ich aber die gesplitteten Teile wieder zusammen? Diese Frage beantworte ich im nächsten Abschnitt.

Join-Function

Die Join-Funktion fügt die Element eines Arrays zu einem String zusammen, ist also im Prinzip das Gegenteil der Split-Funktion. Hier setze ich nun die vorher gesplittete IP-Adresse wieder zusammen:

 1: strTestIP2 = Join(arrTestIP,".")
 2: response.write strTestIP2

Die Syntax der Join-Funktion ist jedoch etwas einfacher als die der Split-Funktion und ist wie folgt: Join(arrName,Trennzeichen). Auch hier ist wieder beim Trennzeichen aufzupassen, daß dieses in Anführungszeichen gesetzt wird. Das Trennzeichen ist optional.

In unserem Beispiel ist das Trennzeichen ein Punkt, wenn Sie aber kein Trennzeichen wollen, dann müssen Sie das wie folgt machen: Join(arrTestIP,"") - hiermit haben Sie ein Trennzeichen der Länge null eingefügt. Wenn Sie kein Trennzeichen definieren wird ein Leerzeichen zwischen den einzelnen Elementen zurückgegeben.

Erase-Anweisung

Die Erase-Anweisung ist mit einiger Vorsicht zu genießen. Diese Anweisung verhält sich für statische und dynamische Arrays verschieden: bei statischen Arrays werden die Elemente neu initialisiert, und bei dynamischen wird der von den Elementen belegte Speicherplatz wieder freigegeben.

Bei statische Arrays gibt die Erase-Anweisung keinen Speicherplatz frei sondern initialisiert die einzelnen Elemente neu, das heißt die Inhalte der Elemente werden gelöscht nicht aber die Elemente selbst.

Bei dynamischen Arrays gibt die Erase-Anweisung den vorher verwendeten Speicher wieder frei - hier werden die Elemente des Arrays tatsächlich gelöscht. Vorsicht: Sie müssen vor dem nächsten Gebrauch des Arrays dieses wieder mit der ReDim-Anweisung neu deklarieren. Bei dynamischen Arrays kommt es somit zu einem Speichergewinn.

 1: Dim arrStatisch(6)
 2: Dim arrDynamisch()
 3: ReDim arrDynamisch(4)
 4:
 5: Erase arrStatisch 
 6: Erase arrDynamisch

In den ersten drei Zeilen dimensioniere ich ein statisches und ein dynamisches Array. In der Zeile 5 lösche ich die Inhalte der Elemente des Arrays arrStatisch, und in Zeile 6 lösche ich die Elemente des Arrays arrDynamisch. Der Speicherplatz des dynamischen Arrays wird wieder freigegeben. Der Speicherplatz des statischen bleibt weiterhin allokiert. Sie können die Typen der Variablen mittels VarType(arrStatisch) prüfen und werden merken, daß es sich auch weiterhin um ein Array handelt (Ergebnis der VarType-Überprüfung ist 8204 das bedeutet Array mit Untertyp Variant).

Filter-Funktion

Wenn Sie nach Zeichenfolgen suchen, aber nicht wissen in welchem Element sich diese befinden, dann ist die Filter-Funktion eine gute Hilfe. Die Filter-Funktion gibt ein nullbasierendes eindimensionales Array zurück, dessen Inhalt über die Filterkriterien bestimmt wird - das heißt, kommt in einem Element eines Arrays (sollte eine Zeichenfolge sein) die in der Filter-Funktion gesuchte Zeichenkette vor, wird dieses Element in ein neues Array an die Position (0) geschrieben, das nächste an die Position (1) usw.

Die Syntax ist wieder recht einfach: Filter(arrSuche, Zeichenkette). Das Array arrSuche ist jenes, in dem Sie nach der Zeichenkette suchen wollen. arrSuche kann sowohl mit Zahlen als auch mit anderen Zeichen befüllt sein.

 1: Dim arrSuche(2)
 2: Dim arrJahr
 3: arrSuche(0)= "Sommer" 
 4: arrSuche(1)= "Herbst"
 5: arrSuche(2)= "Winter"
 6:
 7: arrJahr = Filter(arrSuche, rbs)
 8: response.write arrJahr(0)

Noch einige wichtige Details zur Filter-Funktion: Wenn die Funktion keine übereinstimmende Zeichenfolge findet, wird ein leeres Array zurückgegeben. Das zurückgegebene Array hat genau so viele Elemente wie Übereinstimmungen bei der Suche waren. Fehlermeldungen treten auf, wenn Sie keine Angaben für die Zeichenkette geben oder wenn Sie ein zwei- oder mehrdimensionales Array durchsuchen möchten.

Schlußbemerkung

Mit diesem Artikel sollten Sie sich nun mit den wichtigsten Array-Funktionen auskennen und auch im Stande sein, diese einzusetzen. Sie haben unter anderem gelernt ,wie man vermeidet daß durch die ReDim-Anweisung Daten eines dynamischen Arrays verlorengehen, oder wie man gezielt nach Zeichenketten in Arrays suchen kann - und noch einiges mehr.

This printed page brought to you by AlphaSierraPapa

Download des Codes

Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20001002.zip

Verwandte Artikel

Das Array, unendliche Weiten?
http:/www.aspheute.com/artikel/20000927.htm
Dynamische Arrays - Fluch und Segen
http:/www.aspheute.com/artikel/19990807.htm
Sortieren von Arrays in VBScript
http:/www.aspheute.com/artikel/20000906.htm

 

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.