Wie: Text suchen zwischen zwei Textstellen

  • Hallo zusammen,

    vermutlich ist das nicht sonderlich schwierig, aber da muß ich jetzt passen:

    Mir geht es darum, das gewählte Land aus einer Liste herauszufinden und in eine Variable zu lesen. Mit anderen Werten konnte ich mir so helfen:

    Local $aCity = _StringBetween($ErgebnisSAT, 'id="city" type="text" maxlength="100" size="50" value="', '" />')
    $City = _ArrayToString($aCity)

    Bei den Ländern schaut der html code so aus:

    <td><select name="country" onchange="__doPostBack('country','')" language="javascript" id="country">
    <option value="-1">Please Select</option>
    <option value="1">Afghanistan</option>

    <option value="2">Albania</option>
    <option value="3">Algeria</option>
    <option value="4">American Samoa</option>
    ..... da sind noch mehrere Länder aufgeführt....
    <option value="82">Georgia</option>
    <option selected="selected" value="83">Germany</option>
    <option value="84">Ghana</option>

    Jetzt möchte ich also Germany in die Variable bringen. Oder auch jedes andere Land, das der Benutzer mit <option selected="selected" ausgewählt hat.

    Wie mache ich das?

    Danke!

    Einmal editiert, zuletzt von 32vroni (20. Januar 2010 um 18:29)

  • Ganz verstehe ich nicht was du willst aber vielleicht so:

    Spoiler anzeigen
    [autoit]

    Local $aCountry = _StringBetween($ErgebnisSAT, '">', '</option>')
    $Country = _ArrayToString($aCountry)

    [/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.

    • Offizieller Beitrag

    Oder so:

    [autoit]


    $string= '<td><select name="country" onchange="__doPostBack("country","")" language="javascript" id="country"> <option value="-1">Please Select</option> <option value="1">Afghanistan</option> <option value="2">Albania</option> <option value="3">Algeria</option> <option value="4">American Samoa</option> ..... da sind noch mehrere Länder aufgeführt.... <option value="82">Georgia</option> <option selected="selected" value="83">Germany</option> <option value="84">Ghana</option>'
    $select = StringRegExpReplace($string, '(?s).+<option selected="selected" value=".*?">(.+?)<\/option>.*', '$1')
    MsgBox(0, 0, $select)

    [/autoit]
  • Nochmal zum besseren Verständnis:
    Du möchtest wissen was der Benutzer im Browser ausgewählt hat? Wenn ja, dann kannst Du das nicht über den Quelltext herausfinden, dazu mußt Du auf den Browser zugreifen.
    selected="selected" definiert nur, was bei einem Aufruf der Seite angezeigt wird, das ändert sich nicht bei einer Auswahl.

  • Nein, es ist so, daß ich auf eine Datenbank zugreife, da eine email eingebe und dann als Ergebnis die html Seite zurückbekomme. In dieser html Seite ist es so, daß je nach dem, in welchem Land der Benutzer wohnt, der zurückgegebene html Code anders ist. Grund ist, daß ich beim Anzeigen des Ergebnisses noch die Möglichkeit haben soll, das Land zu ändern, denn manche Benutzer geben gar kein Land ein. Den Zugriff auf die Datenbank habe ich nur mittels dieser Webseite, sodaß ich mir ein Skript mache, mit dem ich die Abfrage einfacher gestalte und die zurückbekommenen Daten wiederum in eine andere Datenbank eingeben kann, sodaß diese beiden Datenbanken langsam vereinheitlicht werden.

    Mühselig, aber wenigstens geht es.
    Eure Tips probiere ich noch, da bin ich noch nicht dazu gekommen. Danke aber schonmal.

  • Achso, dann ganz einfach:

    Spoiler anzeigen
    [autoit]

    #include <_HTML.au3> ; siehe meine Signatur
    #include <Inet.au3>

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

    $HTML = _InetGetSource("http://wasauchimmer.htmll")

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

    MsgBox(0, "", _HTML_GetText($HTML, "option", "selected", "selected"))

    [/autoit]
  • Zum besseren Verständnis:

    Der Benutzer kann aus rund zweihundert Ländern auswählen. Wenn er Germany gewählt hat, sieht der Source code so aus:

    <td><select name="country" onchange="__doPostBack('country','')" language="javascript" id="country">
    <option value="-1">Please Select</option>
    <option value="1">Afghanistan</option>
    <option value="2">Albania</option>
    <option value="3">Algeria</option>
    <option value="4">American Samoa</option>

    ;..... da sind noch mehrere Länder aufgeführt, die ich mir aber hier spare....

    <option value="82">Georgia</option>
    <option selected="selected" value="83">Germany</option>
    <option value="84">Ghana</option>


    Ist der Benutzer aber z.B. in Algerien daheim, sieht der Source Code so aus:

    <td><select name="country" onchange="__doPostBack('country','')" language="javascript" id="country">
    <option value="-1">Please Select</option>
    <option value="1">Afghanistan</option>
    <option value="2">Albania</option>
    <option selected="selected" value="3">Algeria</option>
    <option value="4">American Samoa</option>

    Ich muß jetzt das jeweils gewählte Land herausfinden, also Germany oder Algerien, und dieses Wort in die Variable $Country packen. Eigentlich würde es genügen, wenn ich nach dem Begriff suchen würde, der zwischen
    <option selected="selected" value="83">

    und
    </option>
    steht. Dummerweise gibt es drei solcher Auswahllisten in dem gesamten Source Code, der zurückkommt, wenn die email eingegeben wurde, und die unterscheiden sich durch die jeweilige "id=" in der Zeile

    <td><select name="country" onchange="__doPostBack('country','')" language="javascript" id="country">

    In diesem Fall geht es also um die Länderauswahl; dann gib es noch Bundesländer und Sprachauswahl. Also sind die zugehörigen

    <option value="XXX">XXXXXXXXXX</option>

    alle unterschiedlich.

  • Probier es mal so:

    [autoit]

    $eins = _StringBetween($ErgebnisSAT, 'id="country">', '</select>')
    $zwei = _StringBetween($eins[0], '<option selected="selected" ', '/option>')
    $drei = _StringBetween($zwei[0], '">', '<')
    MsgBox(0,"",$drei[0])

    [/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.

  • Oder so:

    Spoiler anzeigen
    [autoit]


    #include <_HTML.au3> ; siehe meine Signatur
    #include <Inet.au3>

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

    $HTML = _InetGetSource("http://wasauchimmer.htmll")

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

    $sCountry = _HTML_GetText($HTML, "option", "selected", "selected", 2) ; = 3te Liste
    ; oder wenn die Values immer unterschiedlich sind:
    $sCountry = _HTML_GetText($HTML, "option", "83", "value")

    [/autoit]
  • Und jetzt noch eine letzte Frage:

    So sieht der Source Code aus:

    id="firstname" type="text" maxlength="100" size="35" value="SUCHBEGRIFF" />

    Und darin will ich jetzt den SUCHBEGRIFF in ein Variable bringen.
    Mit meinem Versuch unten bekomme ich jedoch nur die Länge 0 und natürlich auch keinen SUCHBEGRIFF zurück. Da vermute ich, daß es wohl mit den Anführungszeichen nicht stimmt?

    Local $aFirstName = _StringBetween($ErgebnisSAT, 'id="firstname" type="text" maxlength="100" size="35" value="', '/>')
    $FirstName = _ArrayToString($aFirstName)
    MsgBox (1, "", StringLen($FirstName))

  • Oder so:

    Spoiler anzeigen
    [autoit]

    #include <_HTML.au3>

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

    $HTML = '<input id="firstname" type="text" maxlength="100" size="35" value="SUCHBEGRIFF" />'
    $sValue = _HTML_Get($HTML, "input", "value", "firstname", "id")

    [/autoit]
  • So, dank Eurer Hilfe ist das nun die Lösung:

    $countryeins = _StringBetween($ErgebnisSAT, 'id="country">', '</select>')
    $countryzwei = _StringBetween($countryeins[0], '<option selected="selected" ', '/option>')
    $countrydrei = _StringBetween($countryzwei[0], '">', '<')

    $languageeins = _StringBetween($ErgebnisSAT, 'id="preferredlanguage">', '</select>')
    $languagezwei = _StringBetween($languageeins[0], '<option selected="selected" ', '/option>')
    $languagedrei = _StringBetween($languagezwei[0], '">', '<')

    $stateeins = _StringBetween($ErgebnisSAT, 'id="state">', '</select>')
    $statezwei = _StringBetween($stateeins[0], '<option selected="selected" ', '/option>')
    $statedrei = _StringBetween($statezwei[0], '">', '<')


    $such1= 'id="firstname"'
    $begr1 = '" type='
    Local $aFirstName = _StringBetween($ErgebnisSAT, $such1, $begr1)
    $FN = _ArrayToString($aFirstName)
    $FirstName= StringTrimLeft($FN, 34)

    Bestens - vielen Dank nochmal! ^^ ^^