string filtern, bzw. raussuchen

  • VB.NET

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

    string filtern, bzw. raussuchen

    Moin,

    Ich möchte gerne aus einem Quelltext von einer Website was auslesen.
    Hier habe ich ein Teil des Quelltext:

    <div id="showresult"></div><div id="listall"><div id="card318363" class="cards"><center><img src="i.ytimg.com/vi/6UG5qZOd_WE/default.jpg" width="48" height="48"><br><b>Points</b>: 3<br><span id="count318363" style="display:none;"><font color="maroon" size="2"><b>Timer</b>: <span id="count318363num">0</span>/31</font><br></span><a href="[url='''']javascript:void(0);[/url]" onclick="imageWin(318363,'6UG5qZOd_WE','31','94a40e820d78314d2362592171ffe55d6000a5a3a674334fb65117847b7d41f8');" class="followbutton">View</a><br>[<a href="[url='''']javascript:void(0);[/url]" onclick="skipvid(318363);" style="font-size:0.8em;color:#777;">Skip</a>]</center></div><div id="card317044" class="cardsp"><center><img src="i.ytimg.com/vi/GGIHUP_l9WE/default.jpg" width="48" height="48"><br><b>Points</b>: 2<br><span id="count317044" style="display:none;"><font color="maroon" size="2"><b>Timer</b>: <span id="count317044num">0</span>/42</font><br></span><a href="[url='''']javascript:void(0);[/url]" onclick="imageWin(317044,'GGIHUP_l9WE','42','3f2f7610563453a35ab3964bfde9e4b34402ee34bb309df87c4ad98c9d431138');" class="followbutton">View</a><br>[<a href="[url='''']javascript:void(0);[/url]" onclick="skipvid(317044);" style="font-size:0.8em;color:#777;">Skip</a>]</center></div><div id="card310542" class="cards"><center><img src="i.ytimg.com/vi/nGomIz-iejk/default.jpg" width="48" height="48"><br><b>Points</b>: 2<br><span id="count310542" style="display:none;"><font color="maroon" size="2"><b>Timer</b>: <span id="count310542num">0</span>/46</font><br></span><a href="[url='''']javascript:void(0);[/url]" onclick="imageWin(310542,'nGomIz-iejk','46','c775bee5619cba9266545a97ee25b96a67d14a097f4795c2e832525e543a93f8');" class="followbutton">View</a><br>[<a href="[url='''']javascript:void(0);[/url]" onclick="skipvid(310542);" style="font-
    Und ich möchte gerne card318363 auslesen.
    ich habe dies schon mit Split versucht, aber da findet er nichts:


    VB.NET-Quellcode

    1. _string = Split(str, "Skip</a>]</center></div><div id=") 'ersetzt _stringbetween 1/2 strArr = Split(_string(0), " class=" & Chr(34) & "cards") 'ersetzt _stringbetween 2/2 MsgBox("", strArr(0))

    Dazu habe ich noch 2 sehr viel gesucht bei Google, unter den Begriffen: String zerkleiner / string auslesen / string rausfiltern. Dies war aber erfolglos.
    Wäre echt supernet, wenn mir hier jemand sage kann, wie ich das bewerkstellige :)
    Willkommen im Forum. :thumbup:
    Wo der @ErfinderDesRades: Recht hat, hat er Recht. :thumbsup:
    Also:
    Was genau willst Du denn auslesen?
    Wie oft willst Du solch etwas auslesen?
    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!
    Hey^^

    Also ich möchte die card nummer auslesen, weil die sich immer ändert.
    Aber ich glaube so geht das nicht, wie erfinderdesrades gepostet hat, weil sich die card ja immer ändert. ( muss ich wohl nicht gut ausgedrückt haben, was ich meinte ^^)


    Willkommen im Forum.
    Wo der @ErfinderDesRades: Recht hat, hat er Recht.
    Also:
    Was genau willst Du denn auslesen?
    Wie oft willst Du solch etwas auslesen?


    Also:
    Also die "Card" soll wenn ich eine Seite aufgerufen habe, ausgelesen werden.
    Die liegt ja zwischen

    Quellcode

    1. /div><div id="listall"><div id="
    &

    Quellcode

    1. " class="cards"><center>

    In autoit würde das ja mit _stringbetween($quelltext,'/div><div id="listall"><div id="',' class="cards"><center>') funktionieren.
    Hoffe, ich habs diesmal besser ausgedrückt was ich möchte :)
    Da kannst Du mit DeinString.IndexOf("/div><div id=""listall"2"><div id=""") und DeinString.IndexOf("class=""cards""><center>") die Begrenzung rausfischen und dann nur noch vom Anfang den richtigen Offset abschneiden.
    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!
    Moin,

    Ich habe es jetzt erstmal mit einen Test Text gemacht.


    VB.NET-Quellcode

    1. Dim strArr As String = "anfang mein name ist Peter ende"
    2. Dim suche1 As String
    3. Dim suche2 As String
    4. suche1 = strArr.IndexOf("anfang")
    5. MsgBox(suche1)
    6. suche2 = strArr.IndexOf("ende")



    Und wenn ich dann eine Abfrage mit der Messagebox mache, bekomme ich nur null zurück, auch wenn ich msgbox(suche1(0)) mache.
    Dazu habe ich noch getestet: Dim suche1(1) As String aber dann steht unten in der Fehler Sektion das hier:

    Quellcode

    1. Der Wert vom Typ "Integer" kann nicht in "1-dimensionales Array von String" konvertiert werden



    Kann mir das jemand bitte erklären wie ich zum Lösungsweg komme ? Oder soll ich lieber Regex nehmen?

    timmlanhd11 schrieb:

    VB.NET-Quellcode

    1. strArr.IndexOf("anfang")
    Was erwartest Du denn für einen Rückgabetyp, wenn Du IndexOf(...) eingibst?

    timmlanhd11 schrieb:

    Der Wert vom Typ "Integer" kann nicht in "1-dimensionales Array von String" konvertiert werden
    Erwartest Du immer noch einen String?
    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!
    Erwartest Du immer noch einen String?

    nein ^^

    ErfinderDesRades schrieb:


    Zur Unterscheidung von String und Integer, und um ühaupt wahrzunehmen, dass mit verschiedenen Datentypen hantiert wird, ist unbedingte Vorraussetzung für jedes Coden:
    Option Strict On!


    Okay hab eich jetzt gemacht, danke geht schon besser :)


    Ich mache das jetzt nicht mehr mit dieses Split weil das bei mir nicht hinhaut.
    Einfach zu umständlich, nehme jetzt regex.

    So^^ habe jetzt auch gleich 1 Frage zu Regex bereit.

    VB.NET-Quellcode

    1. Imports System.Text.RegularExpressions
    2. Public Class Form1
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    4. Dim regex As Regex = New Regex("\d+")
    5. Dim match1 As Match = regex.Match("Dot 77 Perls")
    6. MsgBox(match1)
    7. End Sub
    8. End Class


    So bekomme ich allerdings

    Quellcode

    1. Das Argument Prompt kann nicht in den Typ String umgewandelt werden.
    zurück.
    habe es aber so wie in den Tutorial gemacht. Weil da hat es ja geklappt.

    timmlanhd11 schrieb:

    VB.NET-Quellcode

    1. Dim match1 As Match = regex.Match("Dot 77 Perls")
    2. MsgBox(match1)
    Was für ein Typ ist match1 ?
    Was für einen Typ möchte MsgBox() gern anzeigen?
    Womit z.B. kann MsgBox() gar nix anfangen?
    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!
    Jo, jetzt wäre toll, wenn du debuggen könntest. also beim Crash das Lokal-Fenster aufsuchen, match1 expandieren, und gucken, was da so drinne ist.
    Dann weißt du auch, welche Property des Matches du sinnvollerweise per msgbox ausgeben kannst.

    zum debuggen gugge Visual-Studio richtig nutzen
    Auf deutsch: Du kannst keine Semmeln und Würstchen miteinander vergleich, addieren oder sonst was machen.

    Mach Option String On dann wird deine IDE schon mäckern, was falsch ist.
    Du musst deine Werte (Datentypen) umwandeln in das Format, das eine Funktion brauch.

    VB.NET-Quellcode

    1. Dim test as String = "1"
    2. Dim int as integer = Cint(text)
    3. 'oder so:
    4. Dim int as Integer = 2
    5. Dim Str as String = int.ToString 'oder Cstr(int)

    Beispiel

    timmlanhd11 schrieb:

    Verstehe ich irgendwie nicht, wie ich sonnst das Ergebnis abfragen soll.
    Immerhin hast Du die Fragen richtig beantwortet. :thumbsup:
    Und gut, dass Du vom @ErfinderDesRades: und von mir keinen C&P-Code vorgeworfen bekommst, d.H., Du hast heute abend echt was gelernt.
    Aber nun:
    Höre auf das Studio, es redet mit Dir. Stell ihm eine vernünftige Frage und Du bekommst eine vernünftige antwort
    Fragen kannst Du, indem Du hinter einem Objekt einen Punkt eingibst

    VB.NET-Quellcode

    1. MessageBox.Show(match1 . ' den da
    und das Studio antwortet Dir:
    Such Dir raus, was da hinpasst bzw. was Du benötigst und feddich. :D
    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!
    Immerhin hast Du die Fragen richtig beantwortet.
    Und gut, dass Du vom @ErfinderDesRades und von mir keinen C&P-Code vorgeworfen bekommst, d.H., Du hast heute abend echt was gelernt.
    Aber nun:
    Höre auf das Studio, es redet mit Dir. Stell ihm eine vernünftige Frage und Du bekommst eine vernünftige antwort
    Fragen kannst Du, indem Du hinter einem Objekt einen Punkt eingibst


    Okay^^ was heißt C&P?
    Und sorry das ich so viele Fragen stelle, bin noch neuling in VB.

    Dim test as String = "1"
    Dim int as integer = Cint(text)
    'oder so:
    Dim int as Integer = 2
    Dim Str as String = int.ToString 'oder Cstr(int)


    Juchu klappt, vielen dank :)

    timmlanhd11 schrieb:

    was heißt C&P?
    Copy And Paste.
    Jemand schreibt hier ein paar Zeilen rein, Du kopierst sie in Dein Programm und alles läuft oder auch nicht.
    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!
    ähm - was klappt? - weil soweit ich sehe, kannst du damit in diesem Falle nix gescheites anfangen.


    Ich habe das mit Regex zusammen gemacht.
    Dann klappt es :)

    VB.NET-Quellcode

    1. Dim regex As Regex = New Regex("card[0-9]+")
    2. Dim match1 As Match = regex.Match(seiten_aufruf)
    3. Dim Str As String = match1.ToString
    4. MessageBox.Show(Str)