Bestimmte Strings zeilenweise ausgeben

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von Xylon.

    Bestimmte Strings zeilenweise ausgeben

    Hallo. Ich würde gerne wissen, ob es bei VB eine Funktion gibt, mit der ich Strings aus einem langen Text Zeilenweise ausgeben kann. Wichtig ist hierbei, dass dabei auch doppelt vorkommende gefunden und ausgegeben werden.
    Beispiel:

    Hallo - Welt
    ---
    Hallo - Welt
    Hallo!!!! - Welt

    Wenn man jetzt nach Welt sucht sollen alle Zeilen mit Welt ausgegeben werden. Geht das mit Regex oder vielleicht sogar noch leichter?

    Danke im Voraus!
    Wie liegen diese Strings denn vor? Einfaches String.Contains dürfte reichen.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    @Lukas: Wie im Beispiel. Es sind ca. 1000 Zeilen und es sind immer 2- 6 doppelte Strings dabei. Und da möchte ich eben die alle ausgeben. Mit Contains wird das denke ich mal nicht klappen...
    Am Besten lädst du alle Zeilen in eine List(Of String). Das geht entweder über System.IO.File.ReadAllLines("C:\test.txt") oder, wenn du schon einen fertigen String mit allen Zeilen hast mit String.Split(CChar(Environment.NewLine())). Diese kannst du dann einfach durchsuchen.
    @nafets3646:, @Niko Ortner: Das durchsuchen ist nicht das Problem, dafür habe ich ja die TextBox. Nur sind es immer mindestens 2 doppelte Strings die gesucht sind. Ich möchte auch nicht so gerne jeden möglichen String einzeln suchen, das dauert extrem lange...
    @nafets3646: Das ist kein so gutes Beispiel ^^ Also der String ist so aufgebaut:

    RMCP01 = Mario Kart Wii
    RMCE01 = Mario Kart Wii
    RMHP01 = Monster Hunter Tri
    RMHE01 = Monster Hunter Tri
    RMHJ01 = Monster Hunter Tri

    Wenn man dann anch Mario Kart Wii sucht, sollen diese Zeilen angezeigt werden:

    RMCP01 = Mario Kart Wii
    RMCE01 = Mario Kart Wii

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

    VB.NET-Quellcode

    1. Dim lines As List(Of String) = File.ReadAllLines("..\..\test.txt").Where(Function(line) line.Contains("Mario Kart Wii")).ToList()
    2. For Each line In lines
    3. MessageBox.Show(line)
    4. Next


    sowas? Ansonsten mit RegEx wie schon beschrieben.
    Du zeigst keinerlei Eigeninitiative und gibst zu allem Überfluss nur schwammige Beschreibungen. Erwartest du tatsächlich Hilfe?
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    Die Einzeiler-Lösungen sind ja schön und gut, jemand der aber nichtmal weiß wie man eine Auflistung zu einem String zusammenführt wird das stumpf kopieren und nichts verstanden haben - "auf wiedersehen" quasi^^

    VB.NET-Quellcode

    1. Dim lines As List(Of String) = File.ReadAllLines("..\..\test.txt")
    2. dim treffer as new List(Of String)
    3. for each line in lines
    4. if line.contains("blaa") then
    5. treffer.add(line)
    6. end if
    7. next
    8. 'mit treffer-Auflistung weiterarbeiten


    Und ja, alle Elemente in "eins" zusammenfügen geht. Einfach mit einer For-Schleife über die Liste iterieren und jedes Element an einen String anhängen. Das solltest du aber selbst schaffen.
    @FreakJNS
    Ich finde es immer gut, wenn man trotztem eine Einzeiler-Lösung bekommt, man kann sie sich ja wenigstens anschauen. Wenn mans überhaupt nicht versteht, kann man ja den Mehrzeiler nehmen ;).

    @Xylon
    So gehts auch:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. SearchItems() 'Suche starten (da die Textbox leer ist, werden einfach alle Items in die ListBox geschrieben)
    4. End Sub
    5. Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    6. SearchItems() 'Suche starten (wenn in der Textbox etwas drinsteht, wird danach gefiltert
    7. End Sub
    8. Private AllItems As IEnumerable(Of String) = {"RMCP01 = Mario Kart Wii", "RMCE01 = Mario Kart Wii", "RMHP01 = Monster Hunter Tri", "RMHE01 = Monster Hunter Tri", "RMHJ01 = Monster Hunter Tri"}
    9. Private Function SearchItems()
    10. ListBox1.DataSource = Find(AllItems, TextBox1.Text).ToList 'Alle Items heraussuchen, welche das Keyword enthalten und die Datasource der Listbox dran hängen
    11. End Function
    12. Private Function Find(source As IEnumerable(Of String), keyword As String) As IEnumerable(Of String)
    13. Return AllItems.Where(Function(item) item.Contains(keyword)) 'Filtern
    14. End Function
    15. End Class

    Du brauchst nur ne Form1 mit ner ListBox1 und der TextBox1 und den Code.