Array variable has incorrect number of subscripts

  • Hi,

    also eigentlich steht schon alles unten...
    ich sehe nur meinen verdammten fehler nicht.
    Im Combo feld steht z.B. Test 2 und in der Datei Test 1-4 wenn er das durch geht und Test 2 findet soll er den Eintrag löschen...
    evtl gehe ich das ganze auch total falsch an und schieße von hinten durch die Brust ins Auge... Sollte wer eine andere Lösung haben wääre ich trotzdem mit dank verbunden wenn mir einer sagen kann wo der unten stehende Fehler her kommt.

    vielen dank

    Gruß

    [autoit]


    Local $aLines
    $sfile = ("C:\Programme\TTimeTrack\WBS\WBS.txt")
    _FileReadToArray($sfile, $aLines)

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

    For $i = 1 To Ubound($aLines,) -1
    If StringInStr($aLines[$i], GUICtrlRead($Combo1)) Then

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

    _ArrayDelete($aLines,$i)

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

    EndIf
    Next
    _FileWriteFromArray($sfile, $aLines, 1)

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

    Error:

    (456) : ==> Array variable has incorrect number of
    subscripts or subscript dimension range exceeded.:


    If StringInStr($aLines[$i], GUICtrlRead($Combo1)) Then If
    StringInStr(^ ERROR


    ->08:18:53 AutoIT3.exe ended.rc:1

    Einmal editiert, zuletzt von crdy (21. November 2012 um 08:39) aus folgendem Grund: code war nicht sichtbar

  • _FileReadToArray schreibt die Anzahl der Datensätze in das Element 0 des Arrays. Wenn Du Datensätze aus einem Array entfernst, dann mußt Du von hinten nach vorne arbeiten, da Du Dir sonst selbst den Array unter dem Hintern wegziehst.
    Stell Dir vor, Du loopst von 1 bis 4. Das 2. Element löscht Du. Da waren es also nur noch 3 Elemente. Der loop geht aber immer noch von 1 - 4 und crasht dann wenn Du auf Element 4 zugreifen willst.
    Ich würde daher den Code etwas umschreiben:

    [autoit]

    Local $aLines
    $sfile = ("C:\Programme\TTimeTrack\WBS\WBS.txt")
    _FileReadToArray($sfile, $aLines)
    For $i = $aLines[0] To 1 Step -1
    If StringInStr($aLines[$i], GUICtrlRead($Combo1)) Then _ArrayDelete($aLines,$i)
    Next
    _FileWriteFromArray($sfile, $aLines, 1)

    [/autoit]
  • Getested und Funktioniert.

    Vielen dank für die ausführliche Antwort. Obwohl es so logisch und offensichtlich ist, wäre ich darauf glaub ich heute nicht gekommen.

    kudos. :)

    gruß

  • Gerne 8)