Link auseinander nehmen

  • VB.NET

Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von Dancger.

    Link auseinander nehmen

    Guten Morgen zusammen :D

    Ich habe einen Link und den füge ich in eine TextBox hinein.
    Der Link heisst so:
    http://img7.festzeit.ch/mb/xx/xx/pfxxxxx-xx.jpg

    Für jedes x steht eine beliebige Zahl. Wie kann ich den eingefügten Link auseinander nehmen, das es am Schluss so raus kommt.
    Jede Zeile steht für eine TextBox.

    http://img7.festzeit.ch/mb/
    xx
    /
    xx
    /pf
    xxxxx
    -
    xx
    .jpg


    Also einfach gesagt müssen die Zahlen dann alleine in einer Textbox stehen.

    Wie stell ich das an?

    Lg Dancger
    MESS WITH THE BEST, DIE LIKE THE REST! :evil:
    n'paar Links: DNS Tools, Steal WA DB, Droidsheep...

    VB.NET-Quellcode

    1. strText.Substring(26, ?)

    Geht leider nicht, da ich nicht weiss ob es bei den ersten x's dann 2 oder 3 Zahlen sind.

    Das kann also sein:
    img7.festzeit.ch/mb/1/xx/pfxxxxx-xx.jpg

    Aber auch:
    img7.festzeit.ch/mb/2569/xx/pfxxxxx-xx.jpg

    Mit IndexOf kann ich auch nicht arbeiten, da ich die Zahl nicht kenne.

    Und mit EndsWith kann ich ja auch nur die letzten Zeichen des String auslesen.

    Replace bringt nichts.

    Aber trotzdem danke. Diese Seite werd ich später noch mal genau durchlesen.

    Oder hab ich was übersehen ?

    Mfg Dancger
    MESS WITH THE BEST, DIE LIKE THE REST! :evil:
    n'paar Links: DNS Tools, Steal WA DB, Droidsheep...
    Hallo Dancger,

    ich habe mich mal darangesetzt, weil es mich auch interessiert hat :) .
    Meine Version arbeitet mit einem einfachen RegEx und fischt Dir alle Zahlengruppen aus dem String - egal wie Dieser beschaffen ist!

    Anbei als Anhang das Fertige Programm zum ausprobieren.

    VB.NET-Quellcode

    1. Imports System.Text.RegularExpressions
    2. Public Class frmMain
    3. Private Sub btnZahlenSuchen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnZahlenSuchen.Click
    4. Dim sInput As String = txtInput.Text.Trim
    5. Dim re As New Regex("\d*")
    6. For Each m As Match In re.Matches(sInput)
    7. If IsNumeric(m.Value) Then ListBox.Items.Add(m.Value)
    8. Next
    9. End Sub
    10. End Class


    Viel Spaß beim Tüfteln,
    Bruno
    Bilder
    • NurZahlen.png

      27,29 kB, 514×351, 209 mal angesehen
    Dateien
    • NurZahlen.zip

      (7,51 kB, 83 mal heruntergeladen, zuletzt: )
    Funktioniert perfekt ;)

    Jetzt würd ich gerne das Geschriebene begreifen^^

    VB.NET-Quellcode

    1. Private Sub btnZahlenSuchen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim txtInput As String = TextBox1.Text
    3. Dim sInput As String = txtInput.Trim()


    TextInput muss ja mein Link sein, darum TextBox1.Text
    Für was steht .Trim ?

    VB.NET-Quellcode

    1. Dim re As New Regex("\d*")

    Diese Zeile versteh ich nicht mal anstatzsweise (Grundlagen wahrscheinlich , ich weiss^^)

    VB.NET-Quellcode

    1. For Each m As Match In re.Matches(sInput)
    2. If IsNumeric(m.Value) Then ListBox.Items.Add(m.Value)
    3. Next

    Ich probiers ma :D
    Für jeden Fund in der getrimmten TextBox
    Falls es ein nummerischen Wert hat dann fügt er der ListBox ein Item hinzu mit der entsprechenden Value <-- (gibts da eigentlich ein deutsches Wort dafür?)

    Lg Dancger
    MESS WITH THE BEST, DIE LIKE THE REST! :evil:
    n'paar Links: DNS Tools, Steal WA DB, Droidsheep...
    Trim bedeutet, dass alle vorangehenden und nachfolgenden Leerzeichen entfernt wird: Aus " hallo " wird "hallo".
    Regex ist eine Art Suchengine, bei dem mit den Parameter "\d*" alle digits (Zahlen) gesucht werden. Das "*" bedeutet, dass nicht nur einzelne Zahlen, sondern zusammenhängende Zahlen gesucht werden.
    Für ein Mindestmaß an Rechtschreibung, Interpunktion und Majuskeln!
    Ah oke :D

    Die erste Zahl ( 7 ) die ist immer gleich^^
    Also kann ich sozusagen,

    Wenn Zahl = 7 dann 'nothing.
    Aber dann würde er auch wenn dann hinten mal die Zahl 7 alleine steht rausfiltern, oder ?

    Wie bewerkstellige ich dies ?

    Und ausserdem Will ich noch das jede Zahl in einer weiteren TextBox steht.

    Habs mir so gedacht aber so gings nicht:

    VB.NET-Quellcode

    1. Dim Nummer As Integer = 2
    2. For Each m As Match In re.Matches(sInput)
    3. If IsNumeric(m.Value) Then TextBox(Nummer).Text = m.Value.ToString
    4. Nummer += 1
    5. Next

    Fehlermeldung (im VB) :
    Fehler 1 "TextBox" ist ein Typ und kann nicht als Ausdruck verwendet werden. C:\Users\Admin\Documents\Visual Studio 2008\Projects\FestzeitAnzeiger¹\FestzeitAnzeiger¹\Form3.vb 23 40 FestzeitAnzeiger¹


    Lg Dancger
    MESS WITH THE BEST, DIE LIKE THE REST! :evil:
    n'paar Links: DNS Tools, Steal WA DB, Droidsheep...
    Hallo Dancger,

    schön das Dein Ziel erreicht ist und noch schöner, dass Du nachfragst wie es funktioniert.

    >TextInput muss ja mein Link sein, darum TextBox1.Text

    Genau. Und wie und aus welcher Quelle Du die Stringvariable sInput fütterst ist egal - in diesem Fall eben der Inhalt der Textbox.

    >Für was steht .Trim ?

    In diesem Fall eigentlich unwichtig und nur eine kleine Marotte von mir. Trim entfernt überflüssige Leerzeichen links und rechts vom String. kann man machen - muss man aber nicht :D.

    >Dim re As New Regex("\d*")
    >Diese Zeile versteh ich nicht mal anstatzsweise (Grundlagen wahrscheinlich , ich weiss)


    Nee - da mach Dir mal keine Sorgen, das ist alles andere, nur keine Grundlage.
    RegEx - auch reguläre Ausdrücke genannt, sind eine Art Beschreibungsform für Untermengen von Zeichenketten, die eine sehr stark komprimierte Form syntaktischer Regeln für die Filterung von Zeichenketten enthalten.
    Scriptsprachen wie z.B. PERL leben quasi davon und auch in PHP wird es rel. oft angewendet. Schön ist, das .NET uns die RegEx auch bereitstellt.
    Ein ganzes Buch, das ich habe, behandelt nichts weiter als reguläre Ausdrücke (O'REILLY "Reguläre Ausdrücke", Jeffrey E.F. Friedl). Wenn Du das durchackerst und auch nur einen Bruchteil verstanden hast, bist Du fast reif für die Klapsmühle. Ein sehr einfacher RegEx zum Parsen und Valisieren von E-Mail Adressen könnte z.B. so aussehen. "\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b".
    Solltest Du Dich mehr dafür interessieren, schau ins Wiki -> LINK

    Um Deine Frage zu "\d*" zu beantworten: dies kennzeichnet Zahlen. Alle Zahlen und Zahlengruppen im String werden gefunden.

    >Falls es ein nummerischen Wert hat dann fügt er der ListBox ein Item hinzu mit der entsprechenden Value <-- (gibts da eigentlich ein deutsches Wort dafür?

    Genau. Wir gehen also die Liste der Treffer (Matches) durch und schreiben jeden Treffer in die Listbox. Statt der Listbox kannst Du ja Deine Textboxen füllen (statisch oder dynamisch).
    Nimm einfach mal die Bedingung "If IsNumeric(m.Value) Then" raus, dann kannst Du gut sehen was passiert.

    Falls weitere Fragen offen sind -> gern.

    LG,
    Bruno

    Nachtrag: huch! Ihr seid ja heute so schnell. Da schreibt man ein bissl Text und es kommen zwischendurch 2 Postings - erstaunlich ;).

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

    WOW.

    Danke für die tolle Antwort. Druck ich mir gleich aus xDD

    schön das Dein Ziel erreicht ist und noch schöner, dass Du nachfragst wie es funktioniert.

    Ich will was lernen ^^
    Manchmal ist C&P nützlich. Wenn man 0 Schimmer hat wie das funktioniert, oder funktionieren soll, dann ist Code besser.
    Leider gibt es ja auch die dann nur C&P.

    If IsNumeric(m.Value) Then raus

    Hatte ich recht :D, nur nummerische Werte :P

    Falls weitere Fragen offen sind -> gern.

    VB.NET-Quellcode

    1. Dim Nummer As Integer = 2
    2. For Each m As Match In re.Matches(sInput)
    3. If IsNumeric(m.Value) Then TextBox(Nummer).Text = m.Value.ToString
    4. Nummer += 1
    5. Next

    Wieso geht die Zeile "If IsNumeric.." nicht.

    Sollte so sein , das in der ersten TB Der Links teht, der gefiltert werden muss.
    In der zweiten die 1 Zahl
    In der 3 die 2 Zahl
    u.s.w.

    Lg Dancger
    MESS WITH THE BEST, DIE LIKE THE REST! :evil:
    n'paar Links: DNS Tools, Steal WA DB, Droidsheep...
    Geht das echt nicht bisschen kürzer ?

    Ich hätte gedacht das ein zweiteiler reichen würde..

    Gibt es das wirklich nicht ?

    VB.NET-Quellcode

    1. Dim Nummer As Integer = 2
    2. For Each m As Match In re.Matches(sInput)
    3. If IsNumeric(m.Value) Then TextBox(Nummer).Text = m.Value.ToString
    4. Nummer += 1
    5. Next


    Das hab ich aber auch schon irgendwo gesehen, hier im Forum.
    Wenn ich das finden würde ( haha ) könnte ich abgucken..

    Dieso musst du die entweder selber basteln,...

    Wenn es dadurch kürzer wird...
    Wie mach ich das ?

    Lg Dancger
    MESS WITH THE BEST, DIE LIKE THE REST! :evil:
    n'paar Links: DNS Tools, Steal WA DB, Droidsheep...
    Hmm ich könnte ja auch eine If-Verschachtelung" machen
    Oder gleich SelectCase :D

    Und den Wert der "Nummer" abfragen. Das wäre nicht professionell aber funktionieren würde es auf jeden Fall :D
    Und die Anzahl der TextBoxen verändert sich ja auch nicht ^^

    Wie ging der Befehl nochmals von einem String die ersten Buchstaben abzuhauen ?
    Hier war doch irgendwo ein Link xD ^^

    Also:

    VB.NET-Quellcode

    1. Text = Hallo ich bin der Text
    2. 'Befehl
    3. Text = ich bin der Text


    Lg Dancger
    MESS WITH THE BEST, DIE LIKE THE REST! :evil:
    n'paar Links: DNS Tools, Steal WA DB, Droidsheep...
    Ich post noch schnell meinen Code und das war's dann:

    VB.NET-Quellcode

    1. Private Sub btnZahlenSuchen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim txtInput1 As String = TextBox1.Text
    3. Dim txtInput2 As String = txtInput1.Substring(14)
    4. Dim LinkS As String = txtInput2.Trim
    5. Dim re As New Regex("\d*")
    6. Dim TextBoxNummer As Integer = 2
    7. ' Für Zahlen jede einzeln in einer TextBox
    8. For Each m As Match In re.Matches(LinkS)
    9. If IsNumeric(m.Value) Then
    10. Select Case TextBoxNummer
    11. Case 2
    12. TextBox2.Text = m.Value.ToString
    13. TextBoxNummer += 1
    14. Case 3
    15. TextBox3.Text = m.Value.ToString
    16. TextBoxNummer += 1
    17. Case 4
    18. TextBox4.Text = m.Value.ToString
    19. TextBoxNummer += 1
    20. Case 5
    21. TextBox5.Text = m.Value.ToString
    22. TextBoxNummer += 1
    23. End Select
    24. End If
    25. Next
    26. ' Für Zahlen aufgelistet in einer ListBox
    27. 'For Each m As Match In re.Matches(LinkS)
    28. 'If IsNumeric(m.Value) Then ListBox1.Items.Add(m.Value)
    29. 'Next
    30. End Sub


    So funktionierts^^

    Vielen Dank an alle die geholfen haben :D
    :thumbsup:

    Mfg Dancger
    MESS WITH THE BEST, DIE LIKE THE REST! :evil:
    n'paar Links: DNS Tools, Steal WA DB, Droidsheep...
    Hallo Dancger,

    na - heute hast Du aber eine Menge gelernt :).
    Um die Verwirrung komplett zu machen, hab ich mich noch mal auf Deine Textboxen und das Ausblenden der ersten Zahl gestürzt.
    Und da Du eine Lösung suchtest, die kurz und knapp ist, möchte ich Dir diese Variante nicht vorenthalten.

    Aber lass Dir gesagt sein - das was gleich kommt, ist wirklich extrem "quick and dirty"!!
    Es funktioniert zwar alles wie es soll, aber guter Code ist das nicht.
    Zumindest einfacher geht es wohl kaum noch :D.

    VB.NET-Quellcode

    1. Imports System.Text.RegularExpressions
    2. Public Class frmMain
    3. Private Sub btnZahlenSuchen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnZahlenSuchen.Click
    4. Dim sInput As String = txtInput.Text.Trim
    5. Dim re As New Regex("\d*")
    6. Dim i As Integer
    7. For Each m As Match In re.Matches(sInput)
    8. If IsNumeric(m.Value) Then i += 1
    9. If i > 1 And IsNumeric(m.Value) Then DirectCast(GroupBoxAusgabe.Controls("TextBox" & i), TextBox).Text = m.Value
    10. Next
    11. End Sub
    12. End Class


    Anbei wieder ein Screenshot, das fertige Programm und diesmal auch die Projektfiles.

    Viel Spaß beim Tüfteln,
    Bruno

    PS: sehe gerade, Du hattest es in der Zwischenzeit auch schon gelöst - bravo :thumbsup: !
    Bilder
    • Nurzahlen.png

      27,57 kB, 450×261, 154 mal angesehen
    Dateien
    • NurZahlen(exe).zip

      (8,04 kB, 90 mal heruntergeladen, zuletzt: )
    • NurZahlen.zip

      (57,09 kB, 103 mal heruntergeladen, zuletzt: )

    diylab schrieb:

    na - heute hast Du aber eine Menge gelernt :).

    Dank dir ;)

    diylab schrieb:

    Aber lass Dir gesagt sein - das was gleich kommt, ist wirklich extrem "quick and dirty"!!
    Es funktioniert zwar alles wie es soll, aber guter Code ist das nicht.
    Zumindest einfacher geht es wohl kaum noch :D.

    So lange ichs verstehe ^^
    Ich rechne immernoch mit Strings (sehr schlecht ich weiss ;) )

    diylab schrieb:

    PS: sehe gerade, Du hattest es in der Zwischenzeit auch schon gelöst - bravo :thumbsup: !

    Jops^^

    VB.NET-Quellcode

    1. For Each m As Match In re.Matches(sInput)
    2. If IsNumeric(m.Value) Then i += 1
    3. If i > 1 And IsNumeric(m.Value) Then DirectCast(GroupBoxAusgabe.Controls("TextBox" & i), TextBox).Text = m.Value
    4. Next

    Erklärst du mir, wieso das funktioniert ?
    Dann durchläsuft er die Schleife ja nur 1 mal folglich sollten nur die 12 da stehen, oder täusch ich mich ?

    Mfg Dancger
    MESS WITH THE BEST, DIE LIKE THE REST! :evil:
    n'paar Links: DNS Tools, Steal WA DB, Droidsheep...

    Dancger schrieb:

    Erklärst du mir, wieso das funktioniert ?
    Dann durchläsuft er die Schleife ja nur 1 mal folglich sollten nur die 12 da stehen, oder täusch ich mich ?

    An der Schleife hat sich nichts geändert!
    Sie durchläuft immer noch wie gehabt die Treffer Collection komplett.

    Neu daran ist nur, dass ein Counter hochgezählt wird, wenn der Treffer numerisch ist.
    Danach wird die erste zahl ausgeblendet, in dem die Textboxen nur dann Inhalte bekommen, wenn der Counter > 1 ist.
    Jetzt kommt der schmutzige Teil -> Die Textboxen (TextBox2, TextBox3, TextBox4, TextBox5) bekommen ihren Inhalt per DirectCast, wobei der Name der Textbox zusammengesetzt wird (Textbox & i).

    Aber hey - so schmutzig ist das nun auch wieder nicht :D:D.

    Lade Dir bei Bedarf einfach das Projekt runter, dann siehst Du ja, das es funktioniert.

    LG,
    Bruno