Printout Header

HowTo:


Arrays dynamisch erweitern und sortieren mit VBScript


Arrays dynamisch erweitern


In VBscripts benötigt man oft Arrays zur Organisation von Daten. Immer wieder stellt sich hier die Aufgabenstellung, ein Array am Anfang leer zu "erstellen" und dann nach und nach dynamischen mit einer Anzahl von Elementen zu füllen. Dies erreicht man mit dem Kommando ReDim. Wichtig zu wissen:

  - Der Redim-Befehl erwartet als Parameter den oberen Index (Upper Boundary) des vergrößerten Arrays. Dies ist etws anderes
    als die Anzahl der Elemente (Array-Indizes beginnen bei 0 !).   
  - Man darf den Zusatz Preserve auf keinen Fall vergessen, denn sonst wird der Inhalt des Arrays bei der Vergrößerung verloren
    gehen.

Ein Beispiel:

myArray = Array()                               ' ein leeres Array wird erstellt

For i = 1 To 500                                ' so oft man will kann man jetzt...
    Redim Preserve myArray(Ubound(myArray)+1)   ' ...das Array vergrössern
    myArray(Ubound(myArray)) = i                ' ...und ein neues Element (hier i als Beispiel) hinzufügen
Next


Arrays sortieren


Um ein Array zu sortieren, kann man auf diverse Algorithmen zurückgreifen. Eine Sortiermethode, die auch bei großen Arrays gute Ergebnisse bringt, ist ShellSort:


myArray = Array(3,10,4,7,2,1)                                  ' Beispiel-Array

ShellSort myArray, False                                       ' das Array wird aufsteigend sortiert

For i = 0 To UBound(myArray)                                   ' sortiertes Array ausgeben
    WScript.Echo myArray(i)
Next


Sub ShellSort(ByRef arr, ByVal descending)                     ' die ShellSort Funktion
    Dim value, index, index2, distance, lastEl, numEls         ' ...erster Parameter: Arrayd
                                                               ' ...zweiter Parameter: absteigend sortieren ?
    lastEl = UBound(arr)
    numEls = lastEl + 1
    distance = 1
    Do
        distance = distance * 3 + 1
    Loop Until distance > numEls
    Do
        distance = distance \ 3
        For index = distance To lastEl
            value = arr(index)
            index2 = index
            Do While (arr(index2 - distance) > value) Xor descending                     ' Vergleich !!
                arr(index2) = arr(index2 - distance)
                index2 = index2 - distance
                If index2 - distance < 0 Then Exit Do
            Loop
            arr(index2) = value
        Next
    Loop Until distance = 1
End Sub

Diese Implementation des ShellSort-Algorithmus setzt allerdings voraus, dass sich die Elemente des Arrays direkt mit ">" vergleichen lassen. Handelt es sich um komplerere Datentypen, so müssen sie die Zeile mit dem Vergleich entsprechend anpassen.



zurück zum Verzeichnis der Script-FAQs