_StringBetween erzeugt nur manchmal einen Error

  • Moin

    Ich benutze in meinem Script an einer Stelle die Funktion _StringBetween um den Dateinamen eiens Bildes zu extrahieren. Funktioniert eigentlich ganz gut, aber eben, eigentlich. Manchmal erhalte ich nämlich einfach einen Error welcher bei _StringBetween erzeugt wird.
    Der ausgelesene Dateiname wird in eine Variable gespeichert, und um diesen auslesen zu können, muss man mit Arrays arbeiten. Normalerweise klappt dies, manchmal aber liest er anscheinend nichts aus, und somit kann er auch kein Array auslesen. Ich habe es auch mal versucht die "kritischen" Stellen in eine While Schlaufe zu stecken, und diese erst dann zu verlassen wenn der Error nicht mehr vorkommt, jedoch blieb er da die ganze Zeit in der While Schleife stecken, und das Script lief die ganze Zeit.
    Hier mal der Code:
    Ohne While Schleife

    Spoiler anzeigen
    [autoit]

    #include <String.au3>
    #include <FTP_Ex.au3>
    #include <inet.au3>

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

    $server = "Server.Provider.ch"
    $username = "juanitho"
    $pass = _StringEncrypt(0, "Verschlüsselter String", "Schlüssel")

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

    $Open = _FTPOpen("Explosm Comic Upload")
    $Conn = _FTPConnect($Open, $server, $username, $pass, True)

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

    $Sourcecode = _InetGetSource("http://explosm.net/comics/random/index.php")
    $Link = _StringBetween($Sourcecode, '<img alt="Cyanide and Happiness, a daily webcomic" src="', '"></div><br /><table width="100%" cellspacing=0 cellpadd')

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

    ;Extrahieren des reinen Namens
    $Filenameue = _StringBetween($Link[0], 'files/', '.png')

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

    ;Entfernen allfälliger /-Zeichen
    $Filename = StringReplace($Filenameue[0], "/", "_")

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

    ;Runterladen des Zufallscomic
    InetGet($Link[0], @UserProfileDir & "\Explosm\Random.png")

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

    ;Upload des Zufallscomic
    $Ftpp = _FtpPutFile($Conn, @UserProfileDir & "\Explosm\Random.png", "/5is07a/Comic/random/Comic.png")

    [/autoit]

    Mit While Schleife:

    Spoiler anzeigen
    [autoit]

    #include <String.au3>
    #include <FTP_Ex.au3>
    #include <inet.au3>

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

    $server = "Server.Provider.ch"
    $username = "juanitho"
    $pass = _StringEncrypt(0, "Verschlüsselter String", "Schlüssel")

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

    $Open = _FTPOpen("Explosm Comic Upload - 5is07a - 1337 h4xx0r'z Cr3w")
    $Conn = _FTPConnect($Open, $server, $username, $pass, True)

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

    $Sourcecode = _InetGetSource("http://explosm.net/comics/random/index.php")
    While 1
    $Link = _StringBetween($Sourcecode, '<img alt="Cyanide and Happiness, a daily webcomic" src="', '"></div><br /><table width="100%" cellspacing=0 cellpadd')
    If Not @error then ExitLoop
    WEnd

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

    ;Extrahieren des reinen Namens
    While 1
    $Filenameue = _StringBetween($Link[0], 'files/', '.png')
    If not @error then ExitLoop
    WEnd

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

    ;Entfernen allfälliger /-Zeichen
    $Filename = StringReplace($Filenameue[0], "/", "_")

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

    ;Runterladen des Zufallscomic
    InetGet($Link[0], @UserProfileDir & "\Explosm\Random.png")

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

    ;Upload des Zufallscomic
    $Ftpp = _FtpPutFile($Conn, @UserProfileDir & "\Explosm\Random.png", "/5is07a/Comic/random/Comic.png")

    [/autoit]
  • Ist es den nicht möglich ihm zu sagen er soll's nochmal probieren anstatt das Script abzubrechen? Kommt schlussendlich ja aufs selbe hinaus, nämlich dass ich das Script solange nochmal starten muss bis er kein Error mehr ausgibt.

    Nun gut, ihm beim Error zu sagen er soll sich selber noch einmal starten scheint zu klappen, allerdings finde ich das nicht so schön gelöst.

  • fürs wiederholen gibts schleifen... im fall von error handling in etwa soetwas:

    [autoit]


    Do
    _wasAuchImmer()
    Until @error=0 ; also solange bis @error 0 ist; das hier ist für den fall das bei fehlern die @error variable bei fehlern werte zugewiesen bekommt die nicht 0 sind

    [/autoit]
  • Hallo ahatius,

    probier es mal so,

    Spoiler anzeigen
    [autoit]

    #include <String.au3>
    #include <FTP_Ex.au3>
    #include <inet.au3>

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

    $server = "Server.Provider.ch"
    $username = "juanitho"
    $pass = _StringEncrypt(0, "Verschlüsselter String", "Schlüssel")

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

    $Open = _FTPOpen("Explosm Comic Upload - 5is07a - 1337 h4xx0r'z Cr3w")
    $Conn = _FTPConnect($Open, $server, $username, $pass, True)

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

    local notOK =True
    While notOK
    $Sourcecode = _InetGetSource("http://explosm.net/comics/random/index.php")
    $Link = _StringBetween($Sourcecode, '<img alt="Cyanide and Happiness, a daily webcomic" src="', '"></div><br /><table width="100%" cellspacing=0 cellpadd')
    If Not @error then
    ;Extrahieren des reinen Namens
    $Filenameue = _StringBetween($Link[0], 'files/', '.png')
    If not @error then
    notOK = False
    Else
    ;hier noch die genaue Fehlermeldung auslesen
    sleep(1000) ;eventuell anpassen
    EndIf
    EndIf
    WEnd

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

    ;Entfernen allfälliger /-Zeichen
    $Filename = StringReplace($Filenameue[0], "/", "_")

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

    ;Runterladen des Zufallscomic
    InetGet($Link[0], @UserProfileDir & "\Explosm\Random.png")

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

    ;Upload des Zufallscomic
    $Ftpp = _FtpPutFile($Conn, @UserProfileDir & "\Explosm\Random.png", "/5is07a/Comic/random/Comic.png")

    [/autoit]

    habs zwar nicht getestet, (online aus deinem Skript erstelt) sollte aber trotzdem klappen.

    PS.: Woher willst du wissen, dass BugFix dich ignoriert, vielleicht ist er in der Zwischenzeit ja noch nicht online gewesen,

    mfg (Auto)Bert

  • Nun ja, die Meldung als ich auf sein Profil geklickt habe war eindeutig.
    "Du kannst dieses Profil nicht betrachten da Bugfix dich auf deiner Ignorier Liste hat" Aber na ja.

    Jedenfalls danke für die weiteren Vorschläge, werd ich gleich mal probieren.

    • Offizieller Beitrag

    Wie kommts eigentlich dass ich es auf deine Ignorierliste geschafft habe?


    Erinnere dich mal an dein Auftreten in der SB am ersten Tag. :whistling:
    Aber ich bin kein Elefant, bei dem das wie in Granit gemeißelt stehen bleibt. Ich verfolge durchaus die Entwicklung und deine Chancen stehen ganz gut, dass du wieder in die White-List kommst. ;)

  • Was genau meinst du den mit SB?
    Habe mir mal meine Beiträge hier durchgeschaut, und mir viel nichts was irgendwie unhöflich oder dergleichen war, von daher nehme ich an dass du von irgendwo anders redest. Das was ich mal gemacht hatte (was mir jetzt einfällt) im german-nlite.org Forum war Crossposting ohne auf den Thread hier hinzuweisen