Wert nach einem Zeichen auslesen

  • Hallo

    Der Sachverhalt wurde bestimmt schonmal angesprochen und ist sicher auch relativ einfach, allerdings hab ich bisher keine Lösung gefunden. Weder über Google noch über die Forensuche.

    Bitte bis zum Ende lesen. Es ist kein Bot und keine verbotene Handlung. Weder im Forum noch vom Spielepuplisher her.
    Es geht auch um ein im Autoit-Forum nicht gern gesehenes Spiel. Aber bitte lesen

    Problem ist folgendes:
    Ich will für ein MMORPG ein kleines Programm schreiben zum Auslesen von Daten aus einer Webseite. Die Daten die Ausgelesen werden sollen sind der Aktuelle Preis für die Ingamewährung, so das dann der Nutzer nicht selbst auf die Webseite schauen soll und es ausrechnet sondern über das Programm bequem den Preis ausrechnen kann.

    Wo ich hänge ist das Auslesen des Wertes selber. Da er keine Zeichen mehr nach sich hat, sondern im Quelltext mit einem Zeilenumrbuch endet. Somit bin ich mit _StringBetween gescheitert.

    Ausgelesen hab ich den Quellcode über _InetGetSource und dann in eine Variable gespichert.

    Webseite ist folgende: http://www.cn-usa.com/?cmd=buy&loc=24251
    Dort sollen jeweils die Werte für die 200 und 600er Karte ausgelesen und verarbeitet werden.

    Wäre super wenn mir da jemand evtl einen Tip geben könnte wie ich die geforderten Daten aus dem Quelltext in meine neue Variable rein bekomme.

    Vielen Dank schonmal :)

    Einmal editiert, zuletzt von Prixma (6. November 2010 um 09:48)

  • Du schon mit _Stringbetween arbeiten ... bei String Ende setzt du einfach einen Zeilen umbruch ein

    [autoit]

    @CRLF

    [/autoit]

    Mfg
    monkey

    Monkey - die finale Potenz von göttlich!
    Sloganizer

  • Also mein Code sieht jetzt wie folgt aus

    [autoit]

    $Webseite = _INetGetSource('http://www.cn-usa.com/?cmd=buy&loc=24251')
    $Wert = _StringBetween($Webseite,'<td height="20" colspan="2"><font class="cntext">Sale Price:</font> <font class=price_color>$',@CRLF)

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

    MsgBox(0,"X",$Wert)

    [/autoit]

    Als Ausgabe in der MsgBox bekomme ich keinen Wert. Ich weiß nicht ob es daran liegt das die Zeile

    Code
    <td height="20" colspan="2"><font class="cntext">Sale Price:</font> <font class=price_color>$


    im HTML Code mehrmals vorkommt? Aber eigentlich sollte sich der Wert ja überschreiben falls es doppelt vorkommt.

    Gibt es nicht einen Befehl / Möglichkeit womit man nach einem bestimmten Zeichen, in dem Beispiel " $ ", die ersten 4 Zeichen in ein Array schreibt?
    Das ich dann eben 4 Werte damit Abrufen kann?

    Oder gibt es weitere Lösungsvorschläge für mein Problem? Es muss kein kompletter Code sein, nur zumindest eine Funktion die ich mir näher anschauen sollte.
    Lösen will ich es dann alleine :)

    Einmal editiert, zuletzt von Prixma (6. November 2010 um 09:29)

  • _StringBetween gibt ein Array zurück.

    [autoit]


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

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

    $Webseite = _INetGetSource('http://www.cn-usa.com/?cmd=buy&loc=24251')
    $Wert = _StringBetween($Webseite, '<td height="20" colspan="2"><font class="cntext">Sale Price:</font> <font class=price_color>$', @LF)

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

    _ArrayDisplay($Wert)

    [/autoit]

    oder

    Spoiler anzeigen
    [autoit]

    #include <INet.au3>
    #include <String.au3>
    #include <array.au3>
    $Webseite = _INetGetSource('http://www.cn-usa.com/?cmd=buy&loc=24251')
    $Wert = StringRegExp($Webseite, '<font class=price_color>(.*)\n', 3)

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

    _ArrayDisplay($Wert)

    [/autoit]
  • Also zu dem Problem 4 Zeichen nach $ könnte ich so aus dem Kopf sagen:

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

    #include <Array.au3>
    $sString = "$1234 $5432"
    $sLen= Stringlen ($sString)
    Global $sArray[$sLen]
    For $i = 0 to $sLen -1
    $sInStr=Stringinstr ($sString, "$", 0, $i)
    $sArray[$i] = StringMid ($sString, $sInStr , 5)
    Next

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

    _ArrayDisplay ($sArray)

    [/autoit]


    So das war jetzt aus dem Kopf also entschuldige bitte Fehler^^ So würde ich das machen, oder so hab ich das vestanden ^^


    //Edit: Getestet, und hat funktioniert. Es steht immer ein Dollar davor. $1234 und $5432

    Und fals der String den du überprüfst ein wenig länger ist als 10 Zeichen^^ und du sonst die ganze Arrayliste durchsuchen müsstest, hier ist ein vereinfachtes:

    [autoit]

    #include <Array.au3>
    $sString = "$1234 $5432"
    $sLen= Stringlen ($sString)
    Global $sArray[$sLen]
    $o = 0
    For $i = 0 to $sLen -1
    $sInStr=Stringinstr ($sString, "$", 0, $i)
    ;~ $sArray[$i] = StringMid ($sString, $sInStr , 5)

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

    If StringMid($sString, $sInStr , 5) <> "" Then
    $sArray[$o] = StringMid($sString, $sInStr , 5)
    $o +=1
    EndIf
    Next

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

    _ArrayDisplay ($sArray)

    [/autoit]
  • Okay vielen Dank euch allen :-). Ich seh das Problem.
    Ich habe einfach nicht mit den Arrays selber schon gearbeitet. Jetzt funktioniert es.

    Vielen Dank