AutoIt Fehlermeldung: Error: Subscript used with non-Array variable

  • Hallo zusammen

    ich bekomme folgende Fehlermeldung (MsgBox) wenn ich das Script ausführe:

    Line -1:

    Error: Subscript used with non-Array variable


    #include <file.au3>
    Dim $arr
    _FileReadToArray("C:\AutoIt\Adressen.txt",$arr)

    If $arr[1] <> "" Then ; hier soll geprüft werden ob überhaupt Adressen in der Datei stehen
    ;hier sollen weitere Aktionen ausgeführt werden .....
    EndIf


    In diesem Beispiel ist die Datei leer. Ich vermute deswegen kommt die Fehlermeldung. Kann ich mit einem anderen Befehl prüfen ob die Datei leer ist oder ob Adressen drin stehen?

    Einmal editiert, zuletzt von johny1099 (8. Dezember 2009 um 16:50)

  • Ja, Scite muss wissen weiviel Speicher es reservieren soll. Deshalb kann es so nicht funktionieren. Nochmal in der Hilfe nachschauen ;)

  • Jetzt bekomme ich ne andere Fehlermeldung:

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


    #include <file.au3>
    Dim $arr
    Dim $arr[1]

    _FileReadToArray("C:\AutoIt\Adressen.txt",$arr)

    If $arr[1] <> "" Then ; hier soll geprüft werden ob überhaupt Adressen in der Datei stehen
    ;hier sollen weitere Aktionen ausgeführt werden .....

    EndIf

  • Jetzt funktioniert es. Warum ging Dim $arr[1] nicht?


    #include <file.au3>
    Dim $arr
    Dim $arr[2]

    _FileReadToArray("C:\AutoIt\Adressen.txt",$arr)

    If $arr[1] <> "" Then ; hier soll geprüft werden ob überhaupt Adressen in der Datei stehen
    ;hier sollen weitere Aktionen ausgeführt werden .....

    EndIf

  • weil der platz nicht reserviert ist.

    [autoit]

    #include <file.au3>
    #include <array.au3>

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

    Dim $arr[1]

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

    _FileReadToArray("C:\AutoIt\Adressen.txt",$arr)
    _ArrayDisplay($arr)

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

    If $arr[0] <> "" Then ; hier soll geprüft werden ob überhaupt Adressen in der Datei stehen
    ;hier sollen weitere Aktionen ausgeführt werden .....

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

    EndIf

    [/autoit]


    schau dir das mal an... da wird so ein array aufgelistet.

  • Bentutz bitte den [ autoit] [ /autoit] Tag. (im Post-Editor das vorletzte Zeichen. Zwischen SP (Spoiler) und dieser grauen Mülltonne :thumbup:

    Dim $arr[1] ging nicht, weil dein Array dann nur ein Element hat ($arr[0]).
    Wenn FileReadToArray fehlschlägt, und dein Array nicht vergrößert wird, veruschst du auf ein Nicht vorhandenes Element ($arr[1] - Wir erinnern uns: es ging nur bis $arr[0]) zuzugreifen.
    Wenn du Dim $arr[2] benutzt (was eigentlich ne ziemlich doofe art des workarounds ist) werden $arr[0] und $arr[1] erstellt. Auch wenn FileReadToArray() fehlschlägt, ist $arr[1] schon vorhanden und Scite bricht mit keinem kritischen Fehler ab.

    Alternativ geht auch:

    [autoit]


    #include <file.au3>
    Dim $arr
    _FileReadToArray("C:\AutoIt\Adressen.txt", $arr)
    If Not @Error Then ; <---------- :)
    If $arr[1] <> "" Then
    ;... blabalbalaba
    EndIf
    Endif

    [/autoit]
  • Einmal editiert, zuletzt von johny1099 (8. Dezember 2009 um 20:27)