Nur einen bestimmten Teil eines HTML-Textes wiedergeben?

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von NoIde.

    Nur einen bestimmten Teil eines HTML-Textes wiedergeben?

    Hey,
    ich bin leider noch sehr neu im Programmieren mit Visual Basic und weiß daher nicht, ob mein Problem überhaupt lösbar ist. Ich habe bisher keine Lösung online gefunden, deswegen frage ich mal hier. Es wäre sehr nett, wenn du mein Problem ganz durchlesen würdest und versuchen würdest, mir zu helfen. :)
    Also, ich versuche gerade ein Programm für CS:GO Skins zu machen. Ich möchte die Preise der skins auf dem Steam-Market anzeigen lassen. Ich habe auch schon eine passende API dafür gefunden, diese gibt jedoch diesen Text wieder: "{"success":true,"average_price":"17.65","median_price":"18.04","amount_sold":"102","standard_deviation":"7.52","lowest_price":"13.26","highest_price":"20.24","first_sale_date":"1415833200","time":"7","currency":"USD"}".
    Ich möchte nun, dass nur die Zahlen hinter dem "lowest_price": angezeigt werden. In diesem Fall 20.24 und diese in einer TextBox wiedergegeben werden. Ich habe es schon hinbekommen, dass alles in der Box gezeigt wird, jedoch noch nicht, dass nur diese Zahl gezeigt wird. Ein weiteres Problem ist, dass die Zahl sich ändert, also kann ich auch nicht nach "20.24" oder so etwas filtern.
    Ich hoffe ihr versteht mein Problem, wenn nicht, antwortet mir auch gerne mit dem, was ihr nicht versteht.
    Schonmal Danke im Vorraus an alle, die versuchen zu helfen!

    Hier auch nochmal der Link zu der API: csgobackpack.net/api/GetItemPrice/?currency=USD&id=AK-47 | Wasteland Rebel (Battle-Scarred)
    Kann mann bestimmt mit REGEX machen:
    RegEx Tutorial - Blutige Anfänger und Fortgeschrittene
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    wenn du den String eh im Speicher hast, dann kannst du ihn mit Split aufteilen.

    VB.NET-Quellcode

    1. Dim sReihe() As String = Reihe.Replace("""", "").Split(",")


    ergibt dann in

    VB.NET-Quellcode

    1. sReihe(5)="lowest_price:13.26"


    (0): "{success:true"
    (1): "average_price:17.65"
    (2): "median_price:18.04"
    (3): "amount_sold:102"
    (4): "standard_deviation:7.52"
    (5): "lowest_price:13.26"
    (6): "highest_price:20.24"
    (7): "first_sale_date:1415833200"
    (8): "time:7"
    (9): "currency:USD}"

    Den Rest schaffst du dann schon ;)
    Naja mit Regex ist es doch schöner. Wobei die Newtonsoft JSON.Net dll eine noch schönere Wahl wäre.
    Regexbeispiel:

    VB.NET-Quellcode

    1. Dim r As New Regex("(?<=lowest_price"":"")(.*?)(?="")")
    2. Dim m As Match = r.Match(yourJsonString)
    3. If m.Success Then
    4. MessageBox.Show(m.ToString())
    5. End If
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin
    Hey @seelenreiter & @Nolde,
    ich bin wie gesagt noch nicht sonderlich erfahren mit Visual Basic und weiß daher nicht wie ich eure Tipps oder Codes anwenden kann. Ich finde, dass vorallem @seelenreiter's sehr interessant aussieht, jedoch weiß ich nicht, wie ich das in meinen Code einbauen soll. Könntet ihr mir da vielleicht ein wenig helfen?
    Ich habe es schon hinbekommen, dass alles in der Box gezeigt wird

    Ergo hast du den String in einer Textbox.

    oben über allem in die erste Zeile

    VB.NET-Quellcode

    1. Imports System.Text.RegularExpressions


    Dann die Funktion kopieren

    VB.NET-Quellcode

    1. Private Function extractLowPrice(ByVal Rohdaten As String) As String
    2. Dim fnRohdata As New Regex("(?<=lowest_price"":"")(.*?)(?="")")
    3. Dim fnMatch As Match = fnRohdata.Match(Rohdaten)
    4. If fnMatch.Success Then
    5. Return fnMatch.ToString()
    6. Else
    7. Return Nothing
    8. End If
    9. End Function


    und unter der Stelle, wo du den bisherigen Wert in die Textbox schreibst

    VB.NET-Quellcode

    1. textbox.text = extractLowPrice(textbox.text


    einfügen.
    Wie du das in deinen Code reinbekommst solltest du selbst probieren, dann ist der Lerneffekt besser, hier ein generelles Beispiel zum downloaden eines Strings und Werte mit Regex zu finden. Wie Regex funktioniert hat mrMo schon einen Link gepostet, lohnt sich auf jeden Fall sich das anzutun.

    VB.NET-Quellcode

    1. Imports System.Text.RegularExpressions
    2. Imports System.Net
    3. Public Class Form1
    4. Private WithEvents Downloader As New WebClient
    5. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    6. Downloader.DownloadStringAsync(New Uri("http://csgobackpack.net/api/GetItemPrice/?currency=USD&id=AK-47 | Wasteland Rebel (Battle-Scarred)"))
    7. End Sub
    8. Private Sub Downloader_DownloadStringCompleted(ByVal sender As Object, ByVal e As System.Net.DownloadStringCompletedEventArgs) Handles Downloader.DownloadStringCompleted
    9. If e.Error Is Nothing Then
    10. Dim r As New Regex("(?<=lowest_price"":"")(.*?)(?="")")
    11. Dim m As Match = r.Match(e.Result)
    12. If m.Success Then
    13. Label1.Text = m.ToString()
    14. End If
    15. End If
    16. End Sub
    17. End Class


    seelenreiter schrieb:

    oben über allem in die erste Zeile


    Und was wenn ich Option Strict On im Code einschalte? Teste das mal:

    VB.NET-Quellcode

    1. Imports System.Text.RegularExpressions
    2. Imports System.Net
    3. Option Strict On


    Option Strict kann nur vor den Imports festgelegt werden. ;)

    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin

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