seit neuestem Fehlermeldung..arraydatei defekt?

  • bekommen bei meinem programm seit neustem ne fehlermeldung(siehe bild)

    was ist defekt? hat jemand ne ahnung. ich poste auch gerne denQuellcode falls benötigt.
    Hier handelt sich es um das auslesen einer textdatei, speziell tabelle die letzte zeile, 4. spalte.

    autoit.de/wcf/attachment/10697/

    ich dank euch falls mir jemand helfen kann.
    Das komische, es hat ja schon mal funktioniert vor monaten, doch jetzt leider nicht mehr, deswegen bin ich so verzweifelt. gibts doch gar nicht.

  • Hallo Der_Storch,

    die Fehlermeldung besagt eindeutig dass $ret kein Array ist, den Fehler selbst kann man ohne Skript und dazugehöriger Datei nicht analysieren,

    mfg (Auto)Bert

  • Hast du vllt eine Datei oder eine Internetseite ausgelesen die geändert wurde oder nichtmehr existiert?
    Wenn du sonst im Skript nichts geändert hast müsste es ja noch gehen.
    Poste doch bitte dein ganzes Skript dann haben wir den Fehler sicher schnell ;)

    Gruß
    Schnitzel

  • Einfach mal den Teil posten, wo $ret ein Wert zugewiesen wird !
    (Am besten das ganze Skript)

  • Es handelt sich um das auslesen einer dynamischen Textdatei. D.h. sie wir nach bestimmterzeit automatisch geändert und bekommt dann immer eine neuer Zeile.

    Die Textdatei schaut folgendermassen aus:

    autoit.de/wcf/attachment/10706/

    Das Script ist folgendes:
    Je nachdem was in der letzten zeile steht, sollen aktionen ausgeführt werde(noch nicht ganz fertig).

    Vielleicht habt ihr ne idee warum das nicht funzt......
    Es kann ja nicht daran liegen dass die datei sich ändert, soll sie ja, deswegen wird sie ja ausgelesen.

    Ich dank euch für eure hilfe.

  • $ret ist nur dann kein Array, wenn im Text der Pattern nicht vorkommt.
    Also stimmt irgendwas mit der Textdatei nicht.

  • Hallo der Storch,

    das Skript ist so wie du es gepostet hast noch nie gelaufen 1. Startversuch, Ausgabe Scite-Console:

    Code
    >"C:\Programme\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "C:\Programme\AutoIt3\Examples\Tests\derStorch\org.au3" /autoit3dir "C:\Programme\AutoIt3" /UserParams    
    +>13:00:11 Starting AutoIt3Wrapper v.2.0.1.24    Environment(Language:0407  Keyboard:00000407  OS:WIN_XP/Service Pack 3  CPU:X86 OS:X86)
    >Running AU3Check (1.54.19.0)  from:C:\Programme\AutoIt3
    C:\Programme\AutoIt3\Examples\Tests\derStorch\org.au3(123,6) : ERROR: syntax error
        	WEnd
    ~~~~	^
    C:\Programme\AutoIt3\Examples\Tests\derStorch\org.au3 - 1 error(s), 0 warning(s)
    !>13:00:11 AU3Check ended.rc:2
    >Exit code: 0    Time: 3.472

    da ich gerne mit Tidy die gröbsten Schnitzer suche:

    du solltest das Skript also gründlich durcharbeiten, oder den ehemals lauffähigen Stand zurückspielen.

    Edit Skript korrigiert:

    Spoiler anzeigen
    [autoit]

    #include <GUIconstants.au3>
    #include <Array.au3>
    #include <File.au3>

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

    Global $Start
    $zahl = "0"

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

    $text = FileRead(@ScriptDir & "\testneu.txt") ; <========== mögliche Fehlerquelle beseitigt

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

    $pattern = '(\d{2}:\d{2}:\d{2})(?:\s+\d+\s+)(\w+)'
    $ret = StringRegExp($text, $pattern, 3)
    If IsArray($ret) Then ;<=============
    ;_ArrayDisplay($ret)

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

    ;--------------------------------------------------------------------------------------

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

    ;ausführen "Buy"
    If $ret[UBound($ret) - 1] = "Buy" And $zahl = "0" Then

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

    $zahl = "1"

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

    BlockInput(1)
    WinActivate("[CLASS:SunAwtFrame]", "")
    Sleep(1000)
    Send("{F2}")
    BlockInput(0)

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

    EndIf
    ; audführen "Buyerfolgreich"
    If $ret[UBound($ret) - 1] = "Buyerfolgreich" And $zahl = "1" Then

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

    $zahl = "0"

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

    BlockInput(1)
    WinActivate("[CLASS:SunAwtFrame]", "")
    Sleep(1000)
    Send("{F3}")
    BlockInput(0)

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

    EndIf
    ; audführen "Buyerfolglos"
    If $ret[UBound($ret) - 1] = "Buyerfolglos" And $zahl = "1" Then

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

    $zahl = "0"

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

    BlockInput(1)
    WinActivate("[CLASS:SunAwtFrame]", "")
    Sleep(1000)
    Send("{F3}")
    BlockInput(0)

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

    EndIf
    ; audführen "Buyerledigt"
    If $ret[UBound($ret) - 1] = "Buyerledigt" And $zahl = "1" Then

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

    $zahl = "0"

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

    BlockInput(1)
    WinActivate("[CLASS:SunAwtFrame]", "")
    Sleep(1000)
    Send("{F3}")
    BlockInput(0)

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

    EndIf

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

    ;ausführen "Sell"
    If $ret[UBound($ret) - 1] = "Sell" And $zahl = "0" Then

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

    $zahl = "2"

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

    BlockInput(1)
    WinActivate("[CLASS:SunAwtFrame]", "")
    Sleep(1000)
    Send("{F3}")
    Sleep(3000)
    BlockInput(0)

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

    EndIf
    ;audführen "Sellerfolgreich"
    If $ret[UBound($ret) - 1] = "Sellerfolgreich" And $zahl = "2" Then

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

    $zahl = "0"

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

    BlockInput(1)
    WinActivate("[CLASS:SunAwtFrame]", "")
    Sleep(1000)
    Send("{F2}")
    BlockInput(0)

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

    EndIf
    ;audführen "Sellerfolglos"
    If $ret[UBound($ret) - 1] = "Sellerfolglos" And $zahl = "2" Then

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

    $zahl = "0"

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

    BlockInput(1)
    WinActivate("[CLASS:SunAwtFrame]", "")
    Sleep(1000)
    Send("{F2}")
    BlockInput(0)

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

    EndIf
    ; audführen "Sellerledigt"
    If $ret[UBound($ret) - 1] = "Sellerledigt" And $zahl = "2" Then

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

    $zahl = "0"

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

    BlockInput(1)
    WinActivate("[CLASS:SunAwtFrame]", "")
    Sleep(1000)
    Send("{F2}")
    BlockInput(0)

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

    EndIf
    Sleep(1)
    EndIf

    [/autoit]

    und vorsichtshalber eine IsArray-Abfrage zur Vermeidung des Fehlers (falls leere Textdatei) eingefügt,

    mfg (Auto)Bert

  • hallo Bert und @ all. Ich dank dir fürs erst. Ich hab das script natürlich ganz schön verwürgt vor wut. aber hier das komplette script. das ganze läuft natürlich in ner schleife ab

    kannst ja mal testen, funzt nicht.

    die textdatei kannst die nutzen die oben steht. um zu testen brauchst nur die datei öffnen und die letze zeile ändern und speichern..dann sollte es funktionieren.
    man beachte, so stehts auch im script. nach Buy kann nur Buyerfolgreich, Buyerfolglos oder Buyerledigt kommen...bei Sell analog dazu.
    Anmerkung: Wenn in der letzen zeile z.b Buyerfolgreich steht, passiert nix, soll auch nicht. denn diese optionen werden erst wieder aktiviert wenn Buy erfolgt. Kurz gesagt, von der logik, ist alles in ordnung
    um die letzte zeile zu ändern einfach frühere zeile kopieren und einfügen :)

    vielleicht findest du den fehler. Dank dir

    [autoit]

    #include <GUIconstants.au3>
    #include <Array.au3>
    #include <File.au3>

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

    Global $Start
    $zahl = "0"
    Opt("GUIOnEventMode", 1)

    GUICreate("dateiauslesen",600,100,0,0)

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

    GUICtrlCreateButton ("beginnen",0,20,180,50)
    GUICtrlSetOnEvent(-1, '_Start')
    GUICtrlCreateButton ("anhalten",200,20,180,50)
    GUICtrlSetOnEvent(-1, "_Stopp")
    GUICtrlCreateButton ("beenden",400,20,180,50)
    GUICtrlSetOnEvent(-1, "_Exit")

    GUISetState(@SW_SHOW)

    Func _Start()
    $antwort2 = msgbox(4,"ACHTUNG","wirklich beginnen?")
    if $antwort2 = 6 Then $start=1
    if $antwort2 = 7 Then msgbox(48,"ACHTUNG","Es wird nicht begonnen")
    EndFunc

    Func _Stopp()
    $antwort1 = msgbox(4,"ACHTUNG","wirklich anhalten?")
    if $antwort1 = 6 Then $start=0
    if $antwort1 = 7 Then msgbox(48,"ACHTUNG","Es wird nicht angehalten")
    EndFunc

    Func _Exit()
    $antwort = msgbox(4,"ACHTUNG","wirklich beenden?")
    if $antwort = 6 Then Exit
    if $antwort = 7 Then msgbox(48,"ACHTUNG","Es wird nicht beendet")
    EndFunc


    While 1
    If $Start = 1 Then
    While $Start = 1
    ;--------------------------------------------------------------------------------------
    $text = FileRead("testneu.txt")

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

    $pattern = '(\d{2}:\d{2}:\d{2})(?:\s+\d+\s+)(\w+)'
    $ret = StringRegExp($text, $pattern, 3)
    ;~ _ArrayDisplay($ret)

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

    ;--------------------------------------------------------------------------------------

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

    ;ausführen "Buy"
    If $ret[UBound($ret)-1]="Buy" And $zahl = "0" Then

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

    $zahl = "1"

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

    BlockInput(1)
    MsgBox(64, "Ausführung", "Buy")
    BlockInput(0)

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

    EndIf
    ; audführen "Buyerfolgreich"
    if $ret[UBound($ret)-1]="Buyerfolgreich" And $zahl = "1" Then

    $zahl = "0"


    BlockInput(1)
    MsgBox(64, "Ausführung", "Buyerfolgreich")
    BlockInput(0)

    EndIf
    ; audführen "Buyerfolglos"
    If $ret[UBound($ret)-1]="Buyerfolglos" And $zahl = "1" Then

    $zahl = "0"


    BlockInput(1)
    MsgBox(64, "Ausführung", "Buyerfolglos")
    BlockInput(0)

    EndIf
    ; audführen "Buyerledigt"
    If $ret[UBound($ret)-1]="Buyerledigt" And $zahl = "1" Then

    $zahl = "0"

    BlockInput(1)
    MsgBox(64, "Ausführung", "Buyerledigt")
    BlockInput(0)

    EndIf

    ;ausführen "Sell"
    If $ret[UBound($ret)-1]="Sell" And $zahl = "0" Then

    $zahl = "2"

    BlockInput(1)
    MsgBox(64, "Ausführung", "Sell")
    BlockInput(0)

    EndIf
    ;audführen "Sellerfolgreich"
    If $ret[UBound($ret)-1]="Sellerfolgreich" And $zahl = "2" Then

    $zahl = "0"

    BlockInput(1)
    MsgBox(64, "Ausführung", "Sellerfolgreich")
    BlockInput(0)

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


    EndIf
    ;audführen "Sellerfolglos"
    If $ret[UBound($ret)-1]="Sellerfolglos" And $zahl = "2" Then

    $zahl = "0"

    BlockInput(1)
    MsgBox(64, "Ausführung", "Sellerfolglos")
    BlockInput(0)

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


    EndIf
    ; audführen "Sellerledigt"
    If $ret[UBound($ret)-1]="Sellerledigt" And $zahl = "2" Then

    $zahl = "0"

    BlockInput(1)
    MsgBox(64, "Ausführung", "Sellerledigt")
    BlockInput(0)

    EndIf
    Sleep(1)
    WEnd
    EndIf
    Sleep(10)
    WEnd

    [/autoit]
  • Hallo der Storch,

    du hast mindestens einen Fall nicht behandelt, daher Skript korrigiert (musst du aber nach arbeiten):

    Spoiler anzeigen
    [autoit]

    #include <GUIconstants.au3>
    #include <Array.au3>
    #include <File.au3>

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

    Global $Start
    $zahl = "0"
    Opt("GUIOnEventMode", 1)

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

    GUICreate("dateiauslesen", 600, 100, 0, 0)

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

    GUICtrlCreateButton("beginnen", 0, 20, 180, 50)
    GUICtrlSetOnEvent(-1, '_Start')
    GUICtrlCreateButton("anhalten", 200, 20, 180, 50)
    GUICtrlSetOnEvent(-1, "_Stopp")
    GUICtrlCreateButton("beenden", 400, 20, 180, 50)
    GUICtrlSetOnEvent(-1, "_Exit")

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

    GUISetState(@SW_SHOW)

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

    While 1
    If $Start = 1 Then
    While $Start = 1
    ;--------------------------------------------------------------------------------------
    $text = FileRead(@ScriptDir & "\testneu.txt") ;<============

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

    $pattern = '(\d{2}:\d{2}:\d{2})(?:\s+\d+\s+)(\w+)'
    $ret = StringRegExp($text, $pattern, 3)
    If IsArray($ret) Then ;<============
    _ArrayDisplay($ret)

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

    ;--------------------------------------------------------------------------------------

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

    ;ausführen "Buy"
    If $ret[UBound($ret) - 1] = "Buy" And $zahl = "0" Then

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

    $zahl = "1"

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

    BlockInput(1)
    MsgBox(64, "Ausführung", "Buy")
    BlockInput(0)

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

    EndIf
    ; audführen "Buyerfolgreich"
    If $ret[UBound($ret) - 1] = "Buyerfolgreich" And $zahl = "1" Then

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

    $zahl = "0"

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

    BlockInput(1)
    MsgBox(64, "Ausführung", "Buyerfolgreich")
    BlockInput(0)

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

    EndIf
    ; audführen "Buyerfolglos"
    If $ret[UBound($ret) - 1] = "Buyerfolglos" And $zahl = "1" Then

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

    $zahl = "0"

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

    BlockInput(1)
    MsgBox(64, "Ausführung", "Buyerfolglos")
    BlockInput(0)

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

    EndIf
    ; audführen "Buyerledigt"
    If $ret[UBound($ret) - 1] = "Buyerledigt" And $zahl = "1" Then

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

    $zahl = "0"

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

    BlockInput(1)
    MsgBox(64, "Ausführung", "Buyerledigt")
    BlockInput(0)

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

    EndIf

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

    ;ausführen "Sell"
    If $ret[UBound($ret) - 1] = "Sell" And $zahl = "0" Then

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

    $zahl = "2"

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

    BlockInput(1)
    MsgBox(64, "Ausführung", "Sell")
    BlockInput(0)

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

    EndIf
    ;audführen "Sellerfolgreich"
    If $ret[UBound($ret) - 1] = "Sellerfolgreich" And $zahl = "2" Then

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

    $zahl = "0"

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

    BlockInput(1)
    MsgBox(64, "Ausführung", "Sellerfolgreich")
    BlockInput(0)

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

    EndIf
    ;audführen "Sellerfolglos"
    If $ret[UBound($ret) - 1] = "Sellerfolglos" And $zahl = "2" Then

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

    $zahl = "0"

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

    BlockInput(1)
    MsgBox(64, "Ausführung", "Sellerfolglos")
    BlockInput(0)

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

    EndIf
    ;<============== diesen Fall scheinst du vergessen zu haben
    If $ret[UBound($ret) - 1] = "Sellerfolglos" Then

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

    $zahl = "0"

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

    BlockInput(1)
    MsgBox(64, "Ausführung", "Sellerfolglos")
    BlockInput(0)

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

    EndIf
    ; audführen "Sellerledigt"
    If $ret[UBound($ret) - 1] = "Sellerledigt" And $zahl = "2" Then

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

    $zahl = "0"

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

    BlockInput(1)
    MsgBox(64, "Ausführung", "Sellerledigt")
    BlockInput(0)

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

    EndIf
    Sleep(1)
    EndIf
    WEnd
    EndIf
    Sleep(10)
    WEnd

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

    Func _Start()
    $antwort2 = MsgBox(4, "ACHTUNG", "wirklich beginnen?")
    If $antwort2 = 6 Then $Start = 1
    If $antwort2 = 7 Then MsgBox(48, "ACHTUNG", "Es wird nicht begonnen")
    EndFunc ;==>_Start

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

    Func _Stopp()
    $antwort1 = MsgBox(4, "ACHTUNG", "wirklich anhalten?")
    If $antwort1 = 6 Then $Start = 0
    If $antwort1 = 7 Then MsgBox(48, "ACHTUNG", "Es wird nicht angehalten")
    EndFunc ;==>_Stopp

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

    Func _Exit()
    $antwort = MsgBox(4, "ACHTUNG", "wirklich beenden?")
    If $antwort = 6 Then Exit
    If $antwort = 7 Then MsgBox(48, "ACHTUNG", "Es wird nicht beendet")
    EndFunc ;==>_Exit

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

    PS.: das ganze hat mit der ursprünglichen Frage nichts mehr zu tun, denn mit ISArray und @Scriptdir sind die möglichen Fehler aus der ursprünglichen Frage und dem dazugehörigem Skriptteil ausgeschlossen(Ich gehe davon aus dass dies immer noch nicht das komplette Skript ist). Der Rest ist ein Logik-Problem, das diese nichht stimmt zeigt meine 3. Änderung alle mit ;<============= gekennzeichnet

    mfg (Auto)Bert

  • dank dir Bert.

    Nur leider werden mit deinen änderungen die befehle nicht mehr ausgeführt, sondern es erschein nur ein fenster mit den ausgelesen zeilen "Array: ListDisplay" :( :(

    hattest du mein script mal probiert? klappt es bei dir?

    zu deiner 3.Änderung:

    wenn "sellerfolglos" ausgelesen wird wird die zahl auf "0" gesetzt und etwas ausgeführt....... so hast du es geschrieben.
    aber: wenn "sellerfolglos" ausgelesen wird, soll ja nix passieren, solange die zahl auf "0" ist, und die hab ich ja ma anfang schon auf "0" gesetzt mit $zahl = "0" ganz oben

    vielleicht fällt dir noch was ein. irgendwo ist der haken, weiss nur nicht wo...

    würde mich freuen wenn wir es hinbekommen... ;)

  • Nur leider werden mit deinen änderungen die befehle nicht mehr ausgeführt, sondern es erschein nur ein fenster mit den ausgelesen zeilen "Array: ListDisplay" :( :(

    das arraydisplay zeigt ja das es funktioniert. Diese Zeile auskommentieen schaffst du doch sicher alleine.

    Zitat

    hattest du mein script mal probiert? klappt es bei dir?

    Ja aber nur hinsichtlich deiner rsrünglichen Fragestellung.

    Zitat von AutoBert

    Ich gehe davon aus dass dies immer noch nicht das komplette Skript ist

    vielleich solltest du ja die von dir bereitgetsellte Textdatei verwenden. Mit dieser funktioniertb es ansonsten

    daher Skript korrigiert (musst du aber nach arbeiten):

    Der Rest ist ein Logik-Problem, das diese nichht stimmt zeigt meine 3. Änderung alle mit ;<============= gekennzeichnet

    dies ist keine Lösung sondern zeigt zusammen mit deiner Textdatei dass du nicht alle Fälle berücksichtigt hast Edit2: dadrch kommt zumindest eine MsgBox!

    mfg (Auto)Bert

    2 Mal editiert, zuletzt von AutoBert (16. Juli 2010 um 20:17)

  • Ok, ich probier mal was ich machen kann.

    Bert, grosses Lob an dich. Danke für deine Hilfe.