Anfänger Frage: wie ein Array richtig löschen ?

  • Hallo, bin zwar Anfänger mit AutoIt aber ich finds Super!
    Ich habe eine Frage wie mann ein Array richtig löschen kann. In der Dokumentation steht folgendes:

    Zitat

    To erase an array (maybe because it is a large global array and you want to free the memory), simply assign a single value to it:
    $array = 0
    This will free the array and convert it back to the single value of 0.

    Ich habe Folgendes Minimalbeispiel erstellt:

    [autoit]

    Global $out[30]
    Global $n = 0
    Test()
    Exit

    [/autoit][autoit][/autoit][autoit]

    Func Test()
    Local $line = "Test"
    $out[$n] = $line
    EndFunc

    [/autoit]

    Und es funktioniert prima. Aber wenn ich vor der Funktionsauruf das Array $out löschen will, geht es nicht wie Folgendes Beispiel zeigt:

    [autoit]

    Global $out[30]
    Global $n = 0
    $out = 0 ; Array löschen
    Test()
    Exit

    [/autoit][autoit][/autoit][autoit]

    Func Test()
    Local $line = "Test"
    $out[$n] = $line
    EndFunc

    [/autoit]

    Ich bekomme der Fehlermeldung "Subscript used with non-Array variable". :(
    Wie kann ich es richtig machen? Dürfte nicht so schwer sein aber ich krieg es nicht hin...

    Bitte verzeihe mein Deutsch, bin aus dem Ausland aber ich gucke alle Folgen der Ludolfs um etwas Deutsch dazu zu lernen :)

    Programmieren ist ein bisschen Wissenschaft und viel Spass! :)

  • Wenn du das Array komplett löschen willst, weist du einfach der Vraiblen den Wert 0 zu. Dann ist das ganze Array gelöscht.
    Um nur die Inhalte zu löschen, musst du das Array in der gleichen größe neu deklarieren:
    Dim $Array[10]

    oder nimm diese Funktion. Die lösche die Inhalte von 1D, 2D und 3D-Arrays:

    Spoiler anzeigen
    [autoit]

    Func _ArrayEmpty(ByRef $array)
    ; Prog@ndy
    If Not isArray($array) Then Return SetError(1,0,0)
    Switch UBound($array,0)
    Case 1
    Dim $array[UBound($array,1)]
    Case 2
    Dim $array[UBound($array,1)][UBound($array,2)]
    Case 3
    Dim $array[UBound($array,1)][UBound($array,2)][UBound($array,3)]
    Case Else
    Return SetError(2,0,0)
    EndSwitch
    Return 1
    EndFunc

    [/autoit]