Mein Fehler bei _Stringbetween (mal gehts, mal nicht)

  • Hallo, liebe Autoit-Gemeinde,
    habe bei Test mit Firefox.mar folgendes Problem: Mal geht der Code anstandslos und es wird mir der richtige Name der entsprechenden Download-Datei ordentlich angezeigt, dann kommt aber auch ab und zu mal folgender Fehler:

    Spoiler anzeigen


    M:\Documents and Settings\Administrator\Desktop\My AU3\testFF2_leer.au3 (16) : ==> Subscript used with non-Array variable.:
    MsgBox(1,"Name",$NameUpdDatei[0])
    MsgBox(1,"Name",$NameUpdDatei^ ERROR
    ->10:53:34 AutoIT3.exe ended.rc:1

    Jetzt habe ich keine Ahnung, warum das mal anstandslos läuft und mal überhaupt nicht. Weil ich auch dachte, mit

    MsgBox(1,"Name",$NameUpdDatei[0])

    wäre ein Array gegeben.... Bitte um Hilfe und Info, wie ich das sinnvoll immer zum laufen bringen kann.
    Danke im Voraus & ganz liebe Grüße an Alle hier (das ist ein tolles Forum, auch wenn mir meist die Zeit fehlt, bekommt man doch jede Menge zum lernen über die Suche heraus.) Nur hier eben nicht....

    Ach so, der hier eigentliche Code noch:

    Spoiler anzeigen
    [autoit]


    #include <INet.au3>
    #include <String.au3>
    #include <array.au3>

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

    Global $sNewestVersion, $sInstallVersion, $PF=@HomeDrive
    Global $NameUpdDatei[15], $NameUpdDatei

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

    FF_Upd()

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

    Func FF_Upd(); Name der Update-Datei
    $sFF_Upd_Source=BinaryToString(InetRead('http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.13/update/win32/de/', 1))
    ;MsgBox(1,"Webseite",$sFF_Upd_Source)
    $NameUpdDatei=_StringBetween($sFF_Upd_Source,'<img src="/icons/unknown.gif" alt="[ ]"> <a href="','">firefox')
    ;$NameUpdDatei=$NameUpdDatei[0]
    MsgBox(1,"Name",$NameUpdDatei[0])
    EndFunc

    [/autoit]

    Danke mal wieder im Voraus & allen ein schönes WE.
    Manne363.

    Einmal editiert, zuletzt von Manne363 (15. Januar 2011 um 18:53)

  • Wieso deklarierst du $NameUpdDatei erst als Array und dann als variable?
    Der Error entsteht wegen dieser Zeile

    [autoit]

    $NameUpdDatei=$NameUpdDatei[0]

    [/autoit]

    (Zeile 15)
    So geht es bei mir:

    Spoiler anzeigen
    [autoit]

    #include <INet.au3>
    #include <String.au3>
    #include <array.au3>

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

    Global $sNewestVersion, $sInstallVersion, $PF = @HomeDrive, $NameUpdDatei

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

    FF_Upd()

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

    Func FF_Upd(); Name der Update-Datei
    $sFF_Upd_Source = BinaryToString(InetRead('http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.13/update/win32/de/', 1))
    MsgBox(1, "Webseite", $sFF_Upd_Source)
    Global $NameUpdDatei = _StringBetween($sFF_Upd_Source, '<img src="/icons/unknown.gif" alt="[ ]"> <a href="', '">firefox')
    MsgBox(1, "Name", $NameUpdDatei[0])
    EndFunc ;==>FF_Upd

    [/autoit]
  • Hallo Mann363,

    wenn _StringBeetween nichts findet erhälst du auch kein Array zurück. Du kannst den möglichen Fehler so abfangen:

    [autoit]

    if IsArray($NameUpdDatei) Then
    ;$NameUpdDatei=$NameUpdDatei[0]
    MsgBox(1,"Name",$NameUpdDatei[0])
    Else
    MsgBox(48,"Name2","Konnte nichts finden!")
    EndIf

    [/autoit]

    mfg autoBert

  • Hallo, Molaynox und autobert,
    (und natürlich hallo, liebe Auto-It-Gemeinde),

    mal wieder recht herzlichen Dank für die extrem schnelle Hilfe. Riesenlob, wie schnell das hier funktioniert (so schnell komme ich gar nicht wieder dazu .....*gg*).
    Funktioniert jetzt zwar Dank der Tipps (und ich muss da wohl noch etwas "nachsitzen"...), aber was mir total unklar ist, warum manchmal überhaupt nichts gefunden wird. Die Webseite ist doch immer da und der Name damit auch.... Liegt das an mir, an Autoit, am Web (DSL) oder greife ich falsch auf die Daten zu? Erneutes Dankeschön im Voraus & ringsherum ein schönes WE !
    GLG
    Manne363

  • Das hier funktioniert bei mir immer:

    [autoit]

    #include <Array.au3>

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

    $sHTML = BinaryToString(InetRead("http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.13/update/win32/de/"), 4)
    $aResult = StringRegExp($sHTML, '<a href="(.*)">firefox', 3)

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

    _ArrayDisplay($aResult)

    [/autoit]
  • Die Webseite ist doch immer da und der Name damit auch....


    Auch grosse leistungsstarke Server sind ab und zu überfordert, also kurzzeitig nicht für alle erreichbar. Wenn du es so machst:

    Spoiler anzeigen
    [autoit]

    #include <INet.au3>
    #include <String.au3>
    #include <array.au3>

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

    Global $sNewestVersion, $sInstallVersion, $PF=@HomeDrive
    Global $NameUpdDatei

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

    FF_Upd()

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

    Func FF_Upd(); Name der Update-Datei
    $sBinary = InetRead('http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.13/update/win32/de/', 1)
    if not @error Then
    $sFF_Upd_Source=BinaryToString($sBinary)
    ;ConsoleWrite($sFF_Upd_Source & @CRLF)
    $NameUpdDatei=_StringBetween($sFF_Upd_Source,'<img src="/icons/unknown.gif" alt="[ ]"> <a href="','">firefox')
    if IsArray($NameUpdDatei) Then
    _ArrayDisplay($NameUpdDatei)
    ConsoleWrite("Name: "&$NameUpdDatei[0]&@CRLF)
    Else
    MsgBox(1,"Name","Kein Update verfügbar") ;sollte nicht vorkommen ausser Mozillahat den Seitenaufbau geändert
    EndIf
    Else
    MsgBox(1,"Seitenladenfehler","versuchen sie es später noch einmal") ;Internetstörung
    EndIf
    EndFunc

    [/autoit]

    erfährst du wenigstens den Grund, da auch dieser mögliche Fehler behandelt ist,

    mfg autoBert

  • Hello, again,

    und DANKE, DANKE, DANKE!!!!! Ihr seid Spitze (und viel zu schnell *gg*). Die Version von name22 funktioniert tatsächlich immer und der Supertipp von autoBert hilft mir auch extrem weiter. Also nochmals Danke an Alle Ratgeber & Helfer - ich gehe jetzt "nachsitzen und nachlesen".
    Allen ein schönes WE.
    GLG
    Manne363.

    Weiß gar nicht, ob ich schon erwähnt hatte - ein SUPER_FORUM!!!!!!!