Quelltext auslesen und filtern mit Visual 2010

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von leiseflieger.

    Quelltext auslesen und filtern mit Visual 2010

    Hallo,
    Ich hab nun 1 Tag lang das Internet mehr oder weniger erfolglos durchsucht und brauche mal einen "Schubser"

    Also ich habe eine "Statistikseite" auf einem Fremdserver, diese lese folgendermassen aus :

    VB.NET-Quellcode

    1. Dim lines() As String = IO.File.ReadAllLines("c:\HHtoolpaths.txt")
    2. Dim StatTypeId As String = lines(2)
    3. Dim mStatUrl As String = "http://hh80th.com/fdbstats/playerdetails.php?id=" & StatTypeId
    4. Dim httpRequest As HttpWebRequest = HttpWebRequest.Create("http://hh80th.com/fdbstats/playerdetails.php?id=" & StatTypeId)
    5. Dim httpResponse As HttpWebResponse = httpRequest.GetResponse()
    6. Dim reader As StreamReader = New StreamReader(httpResponse.GetResponseStream)
    7. Dim httpContent As String = reader.ReadToEnd

    Der letzte Teil der URL ist variabel, daher kommt ein String zum Einsatz. Die angezeigten Seiten haben aber immer das gleiche Muster.
    Beispiel ist:
    hh80th.com/fdbstats/playerdetails.php?id=2744

    Ich habe also den Quelltext, den kann ich ja auch in einer Textbox ausgeben aber nun stolpere ich eben.
    Ich könnte auch die HTML Seite in einer Webbrowser Box ausgeben aber da ich nur ein paar Angaben ausgeben will ist das, sagen wir mal, unergonomisch

    Jetzt möchte ich in Textboxen (oder Labels) eben bestimmte Zahlen ausgeben (K/D ratio,Hit %,Enemy Aircraft Kills, Killed In Action, Friendly Aircraft Kills )
    Ich muss also den Text mit der Zahl in einem Label ausgeben können (der Wert muss natürlich zu dem stimmig sein ;) )
    Ich hab mich mit der Funktion Regex probiert komme nicht weiter..
    Die HTML Tags hab ich entfernen können:

    VB.NET-Quellcode

    1. Dim s As String = Regex.Replace(TextBox1.Text, "<.*?>", String.Empty, RegexOptions.Singleline)

    allerdings bleiben da immer noch Textbausteine übrig die ich nicht haben will und es sind auch sehr viele Leerzeilen dabei.
    Oder,
    Könnte man die Ausgabe in der WebbrowseBox so gestalten das nur bestimmte HTML Teile ausgegeben werden?
    Ich hab das dumme Gefühl das ich mich irgendwie festgebissen habe und einfach den Wald vor lauter Bäumen nicht mehr sehe..

    Kann mir jemand helfen?

    Dank euch recht sakrisch ;)
    Die Antwort hast Du schon genannt -> Regex :)

    Nachdem Du die Tags schon bereinigt hast, sollten die Ausdrücke recht einfach sein, z.B.:

    Quellcode

    1. Enemy\sAircraft\sKills\s+(\d+)

    Bei Erfolg (match.success) steht die Zahl dann in match.group(1).

    Regex-Tester gibt es hier, inclusive guter Hilfe-Funktion.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Kangaroo“ ()

    Danke Kangaroo für den Denkanstoss, ich mach mich gleich mal dran.... :)
    Bei Erfolg (match.success) steht die Zahl dann in match.group(1).
    Könntest Du mir bitte dafür ein Beispiel geben, ich seh mich schon wieder als "Google heavy user" dasitzen ;)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „leiseflieger“ ()

    Es ging mit einem Tool aus dem Internet noch viel einfacher als über den Umweg mit zuerst HTML Tags entfernen usw....

    http://www.txt2re.com

    Dort habe ich einfach die Quelltextstreifen die Relevant sind eingefügt und dann auf VB.net ausgeben lassen.
    Es ist zwar für eine Consolenanwendung gedacht aber wenn man den unteren Teil ändert dann klappts auch mit einer Formanwendung :)
    In der Zeile

    VB.NET-Quellcode

    1. Dim txt As String
    lasse ich dann allerdings nicht die hineinkopierte Quelltextzeile ran, sondern gehe direkt zur URL, klappt einwandfrei :thumbsup:
    Dieses Spielchen lasse ich pro zu generienden Label einmal laufen und ändere dabei dann nur manuell die Variablen.


    VB.NET-Quellcode

    1. Dim mStatUrl As String = "http://hh80th.com/fdbstats/playerdetails.php?id=3040"
    2. Dim httpRequest As HttpWebRequest = HttpWebRequest.Create("http://hh80th.com/fdbstats/playerdetails.php?id=3040")
    3. Dim httpResponse As HttpWebResponse = httpRequest.GetResponse()
    4. Dim reader As StreamReader = New StreamReader(httpResponse.GetResponseStream)
    5. Dim httpContent As String = reader.ReadToEnd
    6. Dim txt As String = httpContent
    7. Dim re1 As String=".*?"'Non-greedy match on filler
    8. Dim re2 As String = "(Ratio)" 'Word 1
    9. Dim re3 As String = ".*?" 'Non-greedy match on filler
    10. Dim re4 As String = "([+-]?\d*\.\d+)(?![-+0-9\.])"'Float 1
    11. Dim r As Regex = New Regex(re1 + re2 + re3 + re4, RegexOptions.IgnoreCase Or RegexOptions.Singleline)
    12. Dim m As Match = r.Match(txt)
    13. If (m.Success) Then
    14. Dim word1 = m.Groups(1)
    15. Dim float1 = m.Groups(2)
    16. Label1.Text = ("" + float1.ToString + "" + "")


    Als letztes stand da eben
    Console.WriteLine
    das habe ich geändert und das wars ....

    Tja, DAS war der "Schubser" den ich brauchte, ich schulde Dir ein Bier :thumbsup: