_StringBetween in einem Array ?!

  • Hey,

    Ich habe ein Problem mit _StringBetween.
    Ich habe mit dieser Funktion einige Werte in einen Array geschrieben, und muss jeden Eintag in diesem Array wieder "auseinander" nehmen.

    Hier mein Script:

    [autoit]

    Func schauspieler($link)
    Local $aSchauspieler = _StringBetween($link, 'Schauspieler:', 'Musik:')
    Local $bSchauspieler = _StringBetween($aSchauspieler[0], '<span data-tooltip="', '</a>')
    Local $cSchauspieler = _StringBetween($bSchauspieler[0], '">', '</span>')
    Return($cSchauspieler)
    EndFunc

    [/autoit]


    Das Script funktioniert nicht komplett, da ich so nur einen Eintrag ($aSchauspieler[0]) bearbeiten kann...

    Hier der HTML-Code:

    PHP
    <tr> <th>Schauspieler: </th>
     <td><a href="/de/category/-1-Alles/actor/Cate+Blanchett/"><span data-tooltip="als Marissa">Cate Blanchett</span></a>, <a href="/de/category/-1-Alles/actor/Eric+Bana/"><span data-tooltip="als Erik">Eric Bana</span></a>, <span class="title-more-infos" onclick="$(this).hide().next().show();">mehr</span><span style="display:none;"><a href="/de/category/-1-Alles/actor/Saoirse+Ronan/"><span data-tooltip="als Hanna">Saoirse Ronan</span></a>, <a href="/de/category/-1-Alles/actor/Olivia+Williams/"><span data-tooltip="als Rachel">Olivia Williams</span></a>, <a href="/de/category/-1-Alles/actor/Tom+Hollander/"><span data-tooltip="als Isaacs">Tom Hollander</span></a>, <a href="/de/category/-1-Alles/actor/Michelle+Dockery/"><span data-tooltip="als falsche Marissa">Michelle Dockery</span></a>, <a href="/de/category/-1-Alles/actor/Jessica+Barden/"><span data-tooltip="als Sophie">Jessica Barden</span></a>, <a href="/de/category/-1-Alles/actor/Cyron+Bj%C3%B8rn+Melville/">Cyron Bjørn Melville</a>, <a href="/de/category/-1-Alles/actor/Jason+Flemyng/"><span data-tooltip="als Sebastian">Jason Flemyng</span></a>, <a href="/de/category/-1-Alles/actor/John+MacMillan/"><span data-tooltip="als Lewis">John MacMillan</span></a>, <a href="/de/category/-1-Alles/actor/Tim+Beckmann/"><span data-tooltip="als Walt">Tim Beckmann</span></a>, <a href="/de/category/-1-Alles/actor/Vicky+Krieps/"><span data-tooltip="als Johanna Zadek">Vicky Krieps</span></a>, <a href="/de/category/-1-Alles/actor/Christian+Malcolm/"><span data-tooltip="als Head of Ops">Christian Malcolm</span></a>, <a href="/de/category/-1-Alles/actor/Jamie+Beamish/"><span data-tooltip="als Burton">Jamie Beamish</span></a>, <a href="/de/category/-1-Alles/actor/Tom+Hodgkins/"><span data-tooltip="als Monitor">Tom Hodgkins</span></a>, <a href="/de/category/-1-Alles/actor/Aldo+Maland/"><span data-tooltip="als Miles">Aldo Maland</span></a>, <a href="/de/category/-1-Alles/actor/Sebastian+H%C3%BClk/"><span data-tooltip="als Titch">Sebastian Hülk</span></a>, <a href="/de/category/-1-Alles/actor/Joel+Basman/"><span data-tooltip="als Razor">Joel Basman</span></a>, <a href="/de/category/-1-Alles/actor/Mathias+Harrebye-Brandt/"><span data-tooltip="als dänischer Polizist">Mathias Harrebye-Brandt</span></a>, <a href="/de/category/-1-Alles/actor/Alvaro+Cervantes/"><span data-tooltip="als Feliciano">Alvaro Cervantes</span></a>, <a href="/de/category/-1-Alles/actor/Marc+Soto/"><span data-tooltip="als Felicianos Bruder">Marc Soto</span></a>, <a href="/de/category/-1-Alles/actor/Gudrun+Ritter/"><span data-tooltip="als Katrin Zadeck">Gudrun Ritter</span></a>, <a href="/de/category/-1-Alles/actor/Martin+Wuttke/"><span data-tooltip="als Knepfler">Martin Wuttke</span></a>, <a href="/de/category/-1-Alles/actor/Paris+Arrowsmith/"><span data-tooltip="als CIA Tech #1">Paris Arrowsmith</span></a>, <a href="/de/category/-1-Alles/actor/Vincent+Montuel/"><span data-tooltip="als Camp G Doctor #1">Vincent Montuel</span></a>, <a href="/de/category/-1-Alles/actor/Nathan+Nolan/"><span data-tooltip="als Camp G Doctor #2">Nathan Nolan</span></a></span></td>
    
    
      <th>Musik: </th>
     <td><a href="/de/category/-1-Alles/music/Ed+Simons/">Ed Simons</a>, <a href="/de/category/-1-Alles/music/Tom+Rowlands/">Tom Rowlands</a></td>
     </tr>

    Einmal editiert, zuletzt von MasterOfTime (31. Mai 2011 um 14:10)

  • Moin!

    Versuch mal das hier:

    [autoit]

    Func schauspieler($link)
    Local $aSchauspieler = _StringBetween($link, 'Schauspieler:', 'Musik:', 1)
    Local $bSchauspieler = _StringBetween($aSchauspieler[0], '<span data-tooltip="', '</a>', 1)
    Local $cSchauspieler = _StringBetween($bSchauspieler[0], '">', '</span>', 1)
    Return($cSchauspieler)
    EndFunc

    [/autoit]


    Sollte so funzen! Hasst das ',1' vergessen

  • Das schreit aber eher nach RegExp. ;)

    [autoit]

    $arrayActor = StringRegExp($Quellcode, '(?:>)([\w\s]+)(?:</span></a>)', 3)

    [/autoit]

    Wenn du mir jetz auch noch erklären könntest, wie sich dieses '(?:>)([\w\s]+)(?:</span></a>)' zusammensetzt, denn ist mir sicher geholfen :D

  • Komisch, der Vorschlag von euch beiden klappt bei mir nicht...

    Einmal editiert, zuletzt von MasterOfTime (30. Mai 2011 um 15:39)

    • Offizieller Beitrag

    Komisch, der Vorschlag von euch beiden klappt bei mir nicht...


    Getestet habe ich mit dem von dir geposteten Quellcode, alle Schauspieler werden dort herausgefiltert.
    Wie gehts:

    [autoit]

    $arrayActor = StringRegExp($Quellcode, '(?:>)([\w\s]+)(?:</span></a>)', 3)

    [/autoit]


    (?:>) gesucht wird: >, das ?: gibt an, dass dieser Ausdruck nicht Bestandteil des Ergebnisses sein soll
    ([\w\s]+) es sollen Zeichen aus einer Zeichenklasse [ ] besetehend aus Ziffern/Buchstaben a-zA-Z/Unterstrich \w und Leerzeichen \s folgen (min. 1-mal, beliebig oft) ==> das gesuchte Ergebnis
    (?:</span></a>) dem muß folgen (ohne Bestandteil des Ergebnisses zu sein): </span></a>

    Es kann sein, dass du Namen in deinem (anderen) Quellcode hast, die noch andere, hier nicht berücksichtigte Zeichen enthalten, wie z.b. é o.ä. - da müßte dann die Zeichenklasse erweitert werden um diese auch zu berücksichtigen.

  • Wenn ich mit

    [autoit]

    _ArrayDisplay(schauspieler($link), 'Schauspieler')

    [/autoit]


    versuche die Schauspieler anzuzeigen, passiert nichts...

    Meine Funktion sieht wie folgt aus:

    [autoit]


    Func schauspieler($link)
    Local $aSchauspieler = _StringBetween($link, 'Schauspieler:', 'Musik:', 1)
    Local $bSchauspieler = StringRegExp($aSchauspieler, '(?:>)([\w\s]+)(?:</span>)', 3)
    Return($bSchauspieler)
    EndFunc

    [/autoit]
  • Das Problem ist jetz aber, dass genau dieser Ausdruck denn nicht funktionieren wird....
    Die Quelldatei hat über 1.000 Zeilen, und der </span></a> Tag kommt mehrmals vor.
    Das einyige das einmalig ist, ist das <span data-tooltip=.

    Gibt es denn keine andere Möglichkeit, um die Namen sauber zu trennen?

  • Das schreit aber eher nach RegExp. ;)

    StringBetween nutzt RegExp. Just my two cents.


    Und hier noch meine Lösung dazu:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <String.au3>

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

    $link = FileRead("test.txt")

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

    $aSchauspieler = _StringBetween($link, 'Schauspieler:', 'Musik:')
    $split = StringSplit($aSchauspieler[0],'<span data-tooltip="' , 1)

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

    For $i = 2 to $split[0]
    $bSchauspieler = _StringBetween($split[$i],'">',"</span>")
    $split[$i] = $bSchauspieler[0]
    Next

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

    _ArrayDelete($split,0)
    _ArrayDelete($split,0)
    _ArrayDisplay($split)

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

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

    Einmal editiert, zuletzt von chip (31. Mai 2011 um 09:06)

  • Vielen Dank Chip, dank dir funktioniert nun alles perfekt :thumbup:

  • Weil es für otto normal user einfach ist stringbetween zu nutzen für so simple sachen als sich mit direkt mit regexp rumzuschlagen.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.