StringBetween Breich eingrenzen

  • Hallo,

    ich möchte nur einen bestimmten Bereich eines Quellcodes
    durchsuchen und dann auslesen.

    Ich schaffe es einfach nicht, trotz aller Bemühungen

    [autoit]


    #include <array.au3>
    #include <String.au3>
    #Include <INet.au3>
    Dim $Suchtext,$Ergebnis,$Suchbereich

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

    $Suchtext = _INetGetSource("http://de.wikipedia.org/wiki/WWF")

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

    ;$Suchbereich =_StringBetween($Suchtext,'<h2>Inhaltsverzeichnis</h2>','</table>')
    $Ergebnis =_StringBetween($Suchtext,'href='," ") ; Test kpl. Quelltext wird angezeigt

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

    _ArrayDisplay($Ergebnis)

    [/autoit]

    In diesem Breich sollte gesucht werden!
    autoit.de/wcf/attachment/13142/

    Meine Frage:
    Wie kann ich
    1. Den Suchbereich von bis angeben
    2. und anschließend suchen?

    Viele Grüße
    Ilse ;)

  • Hi,
    lies dir nochmal mal die Hilfe zu stringbetween() durch

    [autoit]

    $Ergebnis =_StringBetween($Suchtext,'<a href="#','"><span class')

    [/autoit]

    findet alle Strings, die zwischen dem Startstring und dem Stopstring stehen, und schreibt diese in ein Array

    Zitat

    2. und anschließend suchen?

    stringbetween() findet die Strings alleine^^

  • Hallo Andy,

    ich habe die Hilfe zig mal gelesen.
    Ich komme nicht weiter!

    [autoit]


    $Ergebnis =_StringBetween($Suchtext,'<a href="#','"><span class')

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


    das ist mir klar.

    $Suchtext ist ja der kpl. Quellcode der durchsucht wird!
    Folglich liefert $Ergebnis alles aus dem Quellcode!

    Ich brauche aber nur die Ergebnisse
    für einen bestimmten Bereich innerhalb $Ergebnis


    da hänge ich....

    Liebe Grüße
    Ilse ;)

    Einmal editiert, zuletzt von Ilse (23. April 2011 um 15:38)

  • Kann man so machen. Du solltest aber noch Prüfungen einbauen um Sicherzustellen, dass stringsplit und array search erfolgreich sind ansonsten könnte es zu Fehlern kommen.

    [autoit]


    #include <array.au3>
    #include <String.au3>
    #Include <INet.au3>
    Dim $Suchtext,$Ergebnis[1],$Suchbereich ; wichtig ich habe hier die Variable Ergebnis als Array deklariert

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

    $Suchtext = _INetGetSource("http://de.wikipedia.org/wiki/WWF")
    $temp = StringSplit($Suchtext,@CRLF) ; wandelt quellcode String in Array
    _ArrayDisplay($temp) ; kompletter Quellcode
    $startIndex = _ArraySearch($temp,"<h2>Inhaltsverzeichnis</h2>",0,0,0,1) ; hier gehts los
    $endIndex = _ArraySearch($temp,'<li class="toclevel-2',0,0,0,1) - 1 ; 1 Feld vor dem Treffer ist das letzte das uns interessiert
    ;MsgBox(0,"",$startIndex & " bis " & $endIndex)
    For $i = $startIndex to $endIndex
    $curUrl= _StringBetween($temp[$i],'href='," <") ; für jedes Array Feld des Bereiches der uns interessiert nehmen wir den Teil des Strings de wir suchen
    if $curUrl = 0 Then ; wenn die Suche fehlerhaft war machen wir mit dem nächsten Feld weiter
    ContinueLoop
    Else
    _ArrayAdd($Ergebnis,$curUrl[0]) ; suche war erfolgreich also speichern wir den Teilstring in unser Ergebnis Array
    $Ergebnis[0] += 1 ; kann man auch weglassen, erhöht den Zähler des 0ten Array eintrags um 1, damit man kein ubound benötigt um die Arraygröße zu ermitteln
    EndIf
    Next

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

    _ArrayDisplay($Ergebnis)

    [/autoit]
  • He Misterspeed,

    SUPER! Es klappt. Juhu.... :thumbup:
    Deine Kommentare helfen mir wirklich das ein wenig zu verstehen.
    ...und trotzdem bin ich jedesmal frustiert, warum meine zahlreichen Versuche alle scheitern.
    Du verwendest z.B. ArraySearch und nichts mit StringInStrg, StringMid...

    Man muß also einfach so denken wie du, so viel lernen wie du..., dann klappt das auch!
    Habe auch jedenfall heute nochmal X% von dir gelernt. DANKE!

    Liebe Grüße
    Ilse
    und noch ein Frohes Osterfest ;)