Auslesen von Quelltext / Zeichenhilfe ",;

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Auslesen von Quelltext / Zeichenhilfe ",;

    Hallo,

    leider konnte ich den Titel nicht genau beschreiben, aber ich versuche es mal hier. Ich frage eigentlich recht wenig in Foren und versuche immer erstmal selber alles zu finden, dass hat auch bisher gut geklappt.
    Leider hänge ich aber nun etwas und hoffe das mir jemand helfen kann. Ich habe folgenden Code von folgender Seite:

    Seite Quellcode:

    HTML-Quellcode

    1. { "id":"80996", "name":"eSport4life Tanoa RPG Only +18", "address":"89.163.135.182", "port":"2302", "private":"0", "password":"0", "query_port":"2303", "location":"Germany", "is_online":"1", "players":"0", "maxplayers":"194", "version":"1.62.137464", "platform":null, "uptime":"100", "score":"0", "rank":"9639", "votes":"0", "favorited":"0", "comments":"0", "url":"https://arma3-servers.net/server/80996/", "last_check":"July 24th, 2016 06:48 AM EST", "last_online":"July 24th, 2016 06:48 AM EST"}


    Dieser wird auch erfolgreich ausgelesen mit diesem Code z.b. für den Namen

    VB.NET-Quellcode

    1. Private Sub Label2_Paint(sender As Object, e As EventArgs) Handles Label2.Paint
    2. Dim w As New WebClient
    3. Dim quelltext As String = w.DownloadString("*****URL****")
    4. Dim WertRegex As New System.Text.RegularExpressions.Regex("name(?<Wert>(.*))\,")
    5. Dim Wert As String = WertRegex.Match(quelltext).Groups("Wert").ToString()
    6. Label2.Text = Wert
    7. End Sub


    Ausgabe: ":"eSport4life Tanoa RPG Only +18"

    Das Komma habe ich schon wegbekommen. mit \, Ob das nun richtig war ist eine gute Frage, aber es hat funktioniert.
    Wie bekomme ich den Rest davon Web? Also das ":" am Anfang und das " an Ende?

    Dann hätte ich noch eine zweite Frage, bevor ich noch mal etwas später aufmache. Gleicher Quellcode.
    Dort steht

    is_online":"1",

    Nun möchte ich aber am Ende eine Ausgabe haben alias
    If is_online 1 = Ausgabe Online
    Else is_online 0 = Ausgabe Offline

    Ich würde mich sehr freuen wenn mir da jemand helfen könnte.



    EDIT/ OK nun hab ich es durch probieren doch hinbekommen alles wegzumachen :D. War gar nicht so schwer.

    VB.NET-Quellcode

    1. Dim WertRegex As New System.Text.RegularExpressions.Regex("\""maxplayers""\:\""(?<Wert>(.*))\""\,")



    EDIT2// Ok durch logisches Denken geht doch einiges :DDD Habs hinbekommen.

    VB.NET-Quellcode

    1. Dim w As New WebClient
    2. Dim quelltext As String = w.DownloadString("*****URL****")
    3. Dim WertRegex As New System.Text.RegularExpressions.Regex("\""players""\:\""(?<Wert>(.*))\""\,")
    4. Dim Wert As String = WertRegex.Match(quelltext).Groups("Wert").ToString()
    5. Dim Wert1Regex As New System.Text.RegularExpressions.Regex("\""maxplayers""\:\""(?<Wert1>(.*))\""\,")
    6. Dim Wert1 As String = Wert1Regex.Match(quelltext).Groups("Wert1").ToString()
    7. Label7.Text = Wert + "/" + Wert1 + "Spieler Online"

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

    vom Aufbau her doch ok - du musst nur den richtigen Regex noch finden.
    ich würd dir empfehlen, selbst ein bischen warm zu werden mit regex. Zum testen nimmste am besten einen Regextester, und dazu nimmste dir die Dokumentation zur Brust.
    Beides enthalten in meim Regextester - OpenSource , aber es gibt auch Online-Regextester.
    Willkommen im Forum. :thumbup:

    esport4life schrieb:

    Ich habe folgenden Code
    Dies ist JSon-Syntax:

    Vielleicht ist es sinnvoll, dass Du den Code mit einem JSon-Tool ausliest, da kannst Du jede einzelne Information als solche und per Namen auslesen.
    Das Zauberwort ist ".net json deserialize", gugst Du z.B. hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hab mir auch schon gedacht, dass das JSON ist. Es ist übrigens nicht unbedingt nötig, eine externe Bibliothek zu verwenden.
    msdn.microsoft.com/en-us/libra…serializer(v=vs.110).aspx
    Verweis auf die System.Web.Extensions.dll hinzufügen und schon kann man die Klasse verwenden.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Erstmal danke für eure schnellen Antworten. Ich werde mir die links auf jeden Fall anschauen um besser rein zu kommen.
    Aktuell funktioniert auch alles wie ich es wollte.

    VB.NET-Quellcode

    1. ​Private Sub Label2_Paint(sender As Object, e As EventArgs) Handles Label2.Paint
    2. Dim w As New WebClient
    3. Dim quelltext As String = w.DownloadString("***url***")
    4. Dim WertRegex As New System.Text.RegularExpressions.Regex("\""is_online""\:\""(?<Wert>(.*))\""\,")
    5. Dim Wert As String = WertRegex.Match(quelltext).Groups("Wert").ToString()
    6. If Wert = 1 Then Label2.Text = "ONLINE"
    7. If Wert = 1 Then Label2.ForeColor = Color.Green
    8. If Wert = 0 Then Label2.Text = "OFFLINE"
    9. If Wert = 0 Then Label2.ForeColor = Color.Red
    10. End Sub
    11. Private Sub Label7_Paint(sender As Object, e As EventArgs) Handles Label7.Paint
    12. Dim w As New WebClient
    13. Dim quelltext As String = w.DownloadString("***url***")
    14. Dim WertRegex As New System.Text.RegularExpressions.Regex("\""players""\:\""(?<Wert>(.*))\""\,")
    15. Dim Wert As String = WertRegex.Match(quelltext).Groups("Wert").ToString()
    16. Dim Wert1Regex As New System.Text.RegularExpressions.Regex("\""maxplayers""\:\""(?<Wert1>(.*))\""\,")
    17. Dim Wert1 As String = Wert1Regex.Match(quelltext).Groups("Wert1").ToString()
    18. Label7.Text = Wert + "& /" + Wert1 + "& Spieler &"
    19. End Sub


    Bekomme so die Ausfabe für den Status und die Spieleranzahl. ich weiß ein Profi findet da wohl tausend Fehler :). Aber ich bin froh alles soweit gefunden zu haben und es zum funktionieren zu bringen.
    Vieles scheint einfach logisches Denken zu sein im VB. Daher ging es dann doch ganz gut. Auch wenn die IF Zeilen bestimmt nicht stimmen, es funktioniert aber.
    problematisch findich v.a., dass du den Code im Paint-Event ausführst.
    Paint wird u.U. in sehr schneller Folge gefeuert, und wenn da jedesmal erstmal ein web-Download erfolgt - unter manchen Bedingungen sollte das ziemlich laggen.
    auch unschön ist, dass du 2 mal downloadest - einmal. um einen isonline-Wert zu erhalten, und dann, um players auszulesen.

    Lässt sich das nicht so organisieren, dass nur einmal gedownloaded wird, und beide informationen daraus ausgewertet?