Eingaben mit Komma trennen

  • VB.NET

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

    Eingaben mit Komma trennen

    Hallo, ich habe ein kleines Problem undzwar,

    würde ich gerne die AusgabeN von m.Index jeweils mit einem Komma trennen, sodass nicht nur der letzte Wert angezeigt wird.

    Habt ihr da ein Idee?

    VB.NET-Quellcode

    1. ​Option Strict On
    2. Imports System.Text.RegularExpressions
    3. Public Class Form1
    4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. Dim test = TextBox2.Text.ToString
    6. Dim result = test.Replace(TextBox1.Text, "")
    7. Dim len = (test.Length - result.Length) / TextBox1.Text.Length
    8. TextBox3.Text = len.ToString
    9. Main()
    10. End Sub
    11. Sub Main()
    12. Dim Pattern As String = TextBox1.Text.ToLower()
    13. Dim Test As String = TextBox2.Text.ToLower()
    14. For Each m As Match In Regex.Matches(Test, Pattern, RegexOptions.IgnoreCase)
    15. Console.WriteLine(String.Format("'{0}' :: auf Position {1}", m.Value, m.Index))
    16. Next
    17. End Sub
    18. End Class
    Probier mal:

    VB.NET-Quellcode

    1. Sub Main()
    2. Dim Pattern As String = TextBox1.Text.ToLower()
    3. Dim Test As String = TextBox2.Text.ToLower()
    4. Dim Positionen As String = String.Empty
    5. Dim Matches = (From x In Regex.Matches(Test, Pattern, RegexOptions.IgnoreCase) Select TryCast(x, Match)).ToList
    6. Matches = Matches.Select(Function(n)
    7. If Not Equals(n.Index, Matches.Last.Index) Then
    8. Positionen = String.Concat(Positionen, CStr(n.Index), ", ")
    9. Else
    10. Positionen = String.Concat(Positionen, CStr(n.Index))
    11. End If
    12. Return n
    13. End Function).ToList
    14. Console.WriteLine(String.Format("'{0}' :: auf Position {1}", Pattern, Positionen))
    15. End Sub


    Und vergibt für deine Controls bitte zukünftig aussagekräftige Namen. Button1 ist nicht aussagekräftig.

    Keine Ahnung ob dieser Thread noch aktuell ist, aber das Prinzip wird deutlich:

    Schau hier


    Ein Computer wird das tun, was du programmierst - nicht das, was du willst.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Yanbel“ ()

    dekon12 schrieb:

    würde ich gerne die AusgabeN von m.Index jeweils mit einem Komma trennen, sodass nicht nur der letzte Wert angezeigt wird.

    VB.NET-Quellcode

    1. '...
    2. For Each m As Match In Regex.Matches(Test, Pattern, RegexOptions.IgnoreCase)
    3. Console.WriteLine(String.Format("'{0}' :: auf Position {1}", m.Value, m.Index))
    4. Next
    5. '...
    Da wird doch garnet immer nur der letzte Wert angezeigt.
    Ich würde das Ganze mit String.Join machen.

    VB.NET-Quellcode

    1. Sub Main()
    2. Dim Pattern As String = TextBox1.Text.ToLower()
    3. Dim Test As String = TextBox2.Text.ToLower()
    4. Dim combined As String = String.Join(", ", Regex.Matches(Test, Pattern, RegexOptions.IgnoreCase).Cast(Of Match)().Select(Function(m) m.Index))
    5. Console.WriteLine(String.Format("'{0}' :: auf Position {1}", Pattern, combined))
    6. End Sub


    Es ginge aber auch mit Enumerable.Aggregate

    VB.NET-Quellcode

    1. Dim combined As String = Regex.Matches(Test, Pattern, RegexOptions.IgnoreCase).Cast(Of Match)().Select(Function(m) m.Index.ToString).Aggregate(Function(a, b) a & ", " & b)

    HenryV schrieb:

    Ich würde das Ganze mit String.Join machen.

    VB.NET-Quellcode

    1. Dim combined As String = String.Join(", ", Regex.Matches(Test, Pattern, RegexOptions.IgnoreCase).Cast(Of Match)().Select(Function(m) m.Index))



    Jap, tatsächliche eine elegantere Lösung. :thumbsup:

    Allerdings ist mir gerade aufgefallen, dass die Zählfunktion, die die Anzahl der Matches in TextBox3 eintragen soll auch nicht richtig funktioniert. Daher würde ich die Matches tatsächlich vorher noch in eine List übertragen Um dann die Anzahl der Elemente in die TextBox3 zu übertragen.

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. GetMatches()
    3. End Sub
    4. Sub GetMatches()
    5. Dim Pattern As String = TextBox1.Text
    6. Dim Suchtext As String = TextBox2.Text
    7. Dim Matches = (From x In Regex.Matches(Suchtext, Pattern, RegexOptions.IgnoreCase) Select TryCast(x, Match)).ToList
    8. Dim Positionen As String = String.Join(", ", Matches.Select(Function(m) m.Index))
    9. TextBox3.Text = CStr(Matches.Count)
    10. Console.WriteLine(String.Format("'{0}' :: auf Position {1}", Pattern, Positionen))
    11. End Sub



    Ein Computer wird das tun, was du programmierst - nicht das, was du willst.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Yanbel“ ()

    dekon12 schrieb:

    Super, danke
    Dafür gibt es den Hilfreich-Button. 8o
    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!