Trouble mit den Arrays

  • Hallo zusammen,

    ich bin gerade dabei, mir ein kleines Script zu bauen, das mir die tägliche Arbeit erleichtert. Derzeit bringt mich aber leider ein Array zur Verzweiflung und ich habe keine Ahnung, was da los ist...

    [autoit]


    #include <Array.au3>

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

    func _Check()

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

    $posY = 100
    $posX = 20
    $counter = 0
    $a = 0
    Dim $lineArr[3]

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

    GUICtrlCreateLabel("Test", $posX, $posY-30)

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

    $file = FileOpen($PE_Test)
    While 1
    $line = FileReadLine($file)
    if @error = -1 Then ExitLoop
    $lineArr = StringSplit($line, ":", 2)
    _ArrayDisplay($lineArr, "test")
    $counter = GUICtrlCreateLabel($lineArr[0], $posX, $posY, -1, -1)
    $search = FileFindFirstFile($lineArr[1] & "\*.XML")
    WEnd
    EndFunc

    [/autoit]

    So nun habe ich das Problem, dass das Editor immer am gleichen Punkt aussteigt, nämlich bei $search = FileFindFirstFile($lineArr[1] & "\*.XML"):

    Array variable has incorrect number of subscripts or subscript dimension range exceeded.

    Seltsam daran ist, dass das ArrayDisplay, das ich zu Debug-Zwecken eingebaut habe, ein einwandfreies Array zurückliefert!

    Die Datei $PE_Test sieht im Übrigen so aus:

    Name : Pfad : XML (Die Leerzeichen nur, weil hier sonst wieder Smileys generiert werden.)

    Hat jemand eine Idee, wieso er mir immer sagt, dass das Array nicht stimmt, obwohl es mit ArrayDisplay korrekt angezeigt wird?
    Auch bei $counter = GUICtrlCreateLabel($lineArr[0], $posX, $posY, -1, -1) funktioniert alles tadellos!

    Ich habe langsam keine Ahnung mehr, woran das hängen sollte.. Es ist keine Schleife, die ins Unendliche läuft, die Dimension ist korrekt deklariert und ich arbeite mit absolten bzw. direkten Arrayaufrufen.

    Vielen Dank im Voraus

  • lass mal bei dem Dim des Arrays die [3] weg,

    Eigentlich weis man bei "StringSplit($line, ":", 2)" nicht wie groß das Array wird:

    aus der Hilfe:

    Zitat

    flag = 2, deaktiviert die Rückgabe der Anzahl im ersten Element. Dadurch wird das Array 0-basierend. Man muss nun mit UBound() die Größe des Arrays feststellen.

  • [autoit]


    #include <Array.au3>

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

    func _Check()

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

    Local $posX = 20, $posY = 100
    Local $counter = 0, $a = 0
    Local $aLine, $fOpen = FileOpen($PE_Test)
    Local $readLineArray
    GUICtrlCreateLabel("Test", $posX, $posY-30)

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

    While 1
    $fRead = FileReadLine($fOpen)
    if @error = -1 Then ExitLoop
    $readLineArray = StringSplit($fRead, ":", 2)
    _ArrayDisplay($readLineArray)
    $counter = GUICtrlCreateLabel($lineArr[0], $posX, $posY, -1, -1)
    ;$search = FileFindFirstFile($lineArr[1] & "\*.XML") Wofür? , wenn dann nicht in der While in die While kommt nur FileFindNextFile Wenn überhaupt
    WEnd
    FileClose($fOpen)
    EndFunc

    [/autoit]


    Edit : // hab gerade noch mal mir meinem Post angeschaut, war wohl etwas verpennt an dem Abend du musst natürlich noch einbauen dass die While unterbrochen wird sobald das File komplett eingelesen ist ;), sonst würde er ja nicht aus der Funktion springen
    bin mir nicht sicher ob es dass ist was du suchst aber FileFindFirstFile muss vor der While ausgeführt werden sonst ist bei jedem Durchlauf die selbe Datei in der $search Variable & die Syntax stimmt eh nicht :D
    siehe Autoit Hilfe

    Einmal editiert, zuletzt von Protex (9. November 2011 um 11:07)

  • Guten Abend zusammen,

    Xenobiologist
    Das kann ich morgen versuchen, ich habe derzeit den Quellcode nicht da. Aber ich vermute, dass er genauso auf die Nase fliegt, denn ich habe schon versucht, den Wert von $lineArr[1] direkt nach dem Auslesen der Datei einer normalen Variablen zuzuweisen - Gleicher Fehler.
    Die \* übrigens, weil die Pfadangabe ohne abschließendes \ in der Variable steht und das Script alle XML's überwachen soll.

    BLinz
    Ohne das Dim hatte ich es am Anfang... Hat auch nicht geklappt :(
    Und das Array ist immer gleich groß, da die Quelldatei per Hand gefüllt wird (Oder eher werden muss).

    @Protex
    Muss ich morgen testen mit dem Umstellen. Ich muss dann ja das Befüllen des Arrys mit Umziehen, da die Pfadangabe erst da ausgelesen wird. Im Endeffekt kommt noch ein Counter dazu (Den habe ich hier aber rausgelassen, da er nix zur Sache tut und eventuell Verwirrung stiftet), der die Dateien zusammenzählt und dann am Ende ausgibt.

    Schönen Abend noch allerseits und schon mal Danke.