StringBetween Hilfe

  • Hey Leute,

    ich versuche aus ner Webseite einen zufällig generierten String auszulesen, dummerweise funktioniert das nich ganz mit StringBetween.

    Hier Mal der Quelltext:
    <form method="post" id="proxyform" action=""><input type="hidden" name="i" value="YYYY-MM-DD9af9865d7876d309a071a50bc2f06421">

    Blau ist Datumsformat, Rot der Code.
    Weder dieser Code funktioniert:

    Spoiler anzeigen
    [autoit]

    $sHTML=_WinHttpSimpleRequest($hConnect,"GET")
    ;$sString=@YEAR&"-"&@MON&"-"&@MDAY
    $dID=_StringBetween($sHTML,'YYYY-MM-DD','>')
    _ArrayDisplay($dID)

    [/autoit]

    Noch:

    Spoiler anzeigen
    [autoit]

    $sHTML=_WinHttpSimpleRequest($hConnect,"GET")
    FileWrite("Antwort 1.html", $sHTML)
    $sString=@YEAR&"-"&@MON&"-"&@MDAY
    $dID=_StringBetween($sHTML,$sString,'>')
    _ArrayDisplay($dID)

    [/autoit]

    Alle Includes sind drinne, und wenn ich andere Parameter eingebe funktionierts auch. Nur damit eben nich.

    Ich hoffe mal wieder auf die wachsamen Augen und den scharfen Geist des autoit.de-Forums :D

    Einmal editiert, zuletzt von mietzekatze (12. Mai 2011 um 14:23)

  • Du hast nur einen Flüchtigkeitsfehler eingebaut (das ' " ' fehlt in deinem Endparamter)
    =>

    [autoit]

    #include <array.au3>
    #include <string.au3>

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

    $sHtmlcode = '<form method="post" id="proxyform" action=""><input type="hidden" name="i" value="YYYY-MM-DD9af9865d7876d309a071a50bc2f06421">'
    $aFilter = _StringBetween($sHtmlcode,"YYYY-MM-DD",'">')

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

    If IsArray($aFilter) Then
    _ArrayDisplay($aFilter)
    Else
    MsgBox(0,"Error","Kein Array!")
    EndIf

    [/autoit]


    EDIT: Eigentlich wäre es egal, ob das ' " ' in dem Endparameter ist. Es müsste trotzdem keinen Fehler ausgeben.
    Da mein Beispiel funktioniert liegt der Fehler offenbar an deinem via "_WinHttpSimpleRequest" extrahierten String!

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

  • Wenn ich nach was weniger spezifiziertem suche, zum Beispiel danach:

    [autoit]

    _StringBetween($sHTML,'>','<')

    [/autoit]


    dann gibt er mir erfolgreich ein Array wieder.. Nur klappt mein Beispiel eben nicht.
    Auch wenn ich das so wie du mache, und den Code direkt in den Quelltext mache, klappts, aber der
    Code is ja immer unterschiedlich, deswegen würde sich das so nich realisieren lassen.

    Gäbe es noch ne andere Methode danach zu suchen?

  • Vielleicht kannst du es ja mit StrngRegExp versuchen :)

    Hier mal mein Code:

    [autoit]

    $aRegExp=StringRegExp($sString, '\d{4}-\d{2}-\d{2}(\w+?)">', 3)
    _ArrayDisplay($aRegExp)

    [/autoit]


    Ich bin jetzt davon ausgegangen das der such string so aussieht

    <form method="post" id="proxyform" action=""><input type="hidden" name="i" value="2011-05-129af9865d7876d309a071a50bc2f06421">

    Mfg
    monkey

    Monkey - die finale Potenz von göttlich!
    Sloganizer

  • Vielleicht kannst du es ja mit StrngRegExp versuchen :)

    Das Problem ist, dass ich StringRegExp kein bisschen verstehe ^^'
    Ausserdem weiß ich weder ob der String immer gleich lang ist, noch in welcher Reihenfolge Buchstaben und Zahlen kommen und da der String nur einmal am tag neu generiert wird, kann ich das nich so gut überprüfen.

  • So hier mal ein bisschen beschrieben :)

    [autoit]

    #include<array.au3>
    $sString='<form method="post" id="proxyform" action=""><input type="hidden" name="i" value="2011-05-129af9865d7876d309a071a50bc2f06421">'
    #cs
    Kleine einführung in StringRegEp
    \d sucht nach einer Zahl also(0-9)
    die {4} gibt die anweisung das 4 mal nach einer zahl(0-9) gesucht werden soll findet also z.B 2011

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

    \d{4} \d sucht nach einer Zahl also(0-9) die {4} gibt die anweisung das 4 mal nach einer zahl(0-9) gesucht werden soll findet also z.B 2011
    - sucht nach einem Bindestrich
    \d{2} \d sucht nach einer Zahl also(0-9) die {2} gibt die anweisung das 2 mal nach einer zahl(0-9) gesucht werden soll findet also z.B 05
    - sucht nach einem Bindestrich
    \d{2} \d sucht nach einer Zahl also(0-9) die {2} gibt die anweisung das 2 mal nach einer zahl(0-9) gesucht werden soll findet also z.B 05
    (\w+?) Die klammern eröffnen eine Gruppe, diese Gruppe wird dir dann auch in einem Array ausgegeben. \w sucht nach einem Wortzeichen (a-z A-Z 0-9 oder den _)
    +? gibt die anweisung das solange nach wortzeichen gesucht werden soll...
    "> bis ein Anführungszeichen und ein größer Zeichen gefunden werden
    #ce
    $aRegExp=StringRegExp($sString, '\d{4}-\d{2}-\d{2}(\w+?)">', 3)
    _ArrayDisplay($aRegExp)

    [/autoit]

    Mfg
    monkey

    Monkey - die finale Potenz von göttlich!
    Sloganizer

  • Funktioniert leider auch nicht :\

    Kann es vllt sein, dass $sHTML irgendwie falsch formatiert ist?

    //EDIT:

    Sorry, hab vergessen die Variable zu verändern und weiter $sString benutzt obwohl der Quelltext in $sHTML gespeichert war, mein Fehler. :rolleyes: Funktioniert jetz alles wunderbar, danke :)

    Einmal editiert, zuletzt von mietzekatze (12. Mai 2011 um 14:22)