Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0782: Array-Initialisierer

 von 

Beschreibung 

Array-Initialisierer

Hier werden ein paar Hilfsfunktionen vorgestellt, die es ermöglichen, streng typisierte Arrays zu befüllen, unter Verwendung des ParamArray-Features von VisualBasic.
Die Funktionen unterstützen dynamische Arrays jeden Datentyps ( dynamisches Array: deklariert ohne Angabe der Element-Zahl ).
Diese Flexiblität wird erkauft durch die Verwendung von Variant-Argumenten in den Parameterlisten.
Es obliegt also der Sorgfalt des Benutzers, ein verwendbares Array, sowie dazu passende Elemente zu übergeben, da der Compiler bei Datentyp Variant jedes Argument akzeptiert.
Eine große Gefahr geht davon aber nicht aus, da eine Fehlanwendung sofort einen Laufzeitfehler auslöst.
Die Gefahr, daß Arrays fehlerhaft initialisiert in den weiteren Programm-Ablauf entlassen werden könnten, besteht nicht, aufgrund der strengen Typisierung der Arrays.

Eine Nutzanwendung könnte bei der Assembler-Programmierung liegen, wo der API z.T. sehr lange Zahlen-Arrays übergeben werden.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

keine

Download:

Download des Beispielprojektes [3,26 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'----------- Anfang Projektdatei pjArrayInit.vbp  -----------
' Die Komponente 'Microsoft Windows Common Controls 6.0 (SP6) (mscomctl.ocx)' wird benötigt.

'---- Anfang Modul "modArrayInit" alias modArrayInit.bas ----
Option Explicit

Public Function IsArrayInited(ByRef ArrayArg As Variant) As Boolean
    On Error Resume Next
    If UBound(ArrayArg) < -1 Then 'löst einen Fehler aus, wenn ArrayArg noch nicht initialisiert.
        IsArrayInited = False 'Nur bei Fehler kann dieser Zweig erreicht werden
        Exit Function
    End If
    IsArrayInited = True
End Function

Public Sub ArrayInit(ByRef ArrayArg As Variant, ByVal First As Variant, ParamArray Elements() As Variant)
    'Der Parameter First erzwingt, daß ArrayArg mit mindestens einem Element initialisiert wird
    ArrayConcat ArrayArg, 0, Array(First)
    ArrayConcat ArrayArg, 1, CVar(Elements)
End Sub

'Bei Arrays mit über 150 Elementen kann es zu Problemen kommen, da die IDE "nur" 15 Zeilfortsetzungen zuläßt.
'Diese Sub ermöglicht, einem bestehenden Array weitere Elemente hinzuzufügen.
Public Sub ArrayAddRange(ByRef ArrayArg As Variant, ParamArray Elements() As Variant)
    ArrayConcat ArrayArg, UBound(ArrayArg) + 1, CVar(Elements)
End Sub

Private Sub ArrayConcat(ByRef ArrayArg As Variant, Offset As Integer, Elements As Variant)
    Dim ElementsUBound As Integer
    ElementsUBound = UBound(Elements)
    If ElementsUBound < 0 Then Exit Sub
    ReDim Preserve ArrayArg(ElementsUBound + Offset)
    Dim I As Integer
    For I = 0 To ElementsUBound
        ArrayArg(I + Offset) = Elements(I)
    Next
End Sub


'----- Ende Modul "modArrayInit" alias modArrayInit.bas -----
'--------- Anfang Modul "modMain" alias modMain.bas ---------
Option Explicit

Public Sub main()
    Dim I As Integer
    For I = 0 To 1
        InitAndDisplay
    Next
    Dim Msgs() As String
    ArrayInit Msgs, "Die", "Initialisierung", "funktioniert", "ebensogut", "auch", "mit", "String-Arrays."
    MsgBox Join(Msgs, " ")
End Sub

Private Sub InitAndDisplay()
    Static asm() As Long
    If IsArrayInited(asm) Then
        MsgBox "asm wurde bereits initialisiert"
    Else
        ArrayInit asm, 1, 2, 3, 4
        ArrayAddRange asm, 5, 6, 7, 8, 9
        
        'ab hier nur noch Ausgabe
        Dim Msgs() As String
        ReDim Msgs(UBound(asm) + 1)
        Msgs(0) = "asm wurde wie folgt initialisiert:" & vbNewLine
        Dim I As Integer
        For I = 0 To UBound(asm)
            Msgs(I + 1) = CStr(asm(I))
        Next
        MsgBox Join(Msgs, vbNewLine)
    End If
End Sub
'---------- Ende Modul "modMain" alias modMain.bas ----------
'------------ Ende Projektdatei pjArrayInit.vbp  ------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.