Zählen bestimmer Wörter in ganzer Listbox

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Otti.

    Zählen bestimmer Wörter in ganzer Listbox

    Hallo zusammen, einfache Frage:

    Habe eine Listbox, in der z.b. sowas steht, Item1: MaxMustermann;Tisch:2;017112345678, Item2: FrauMustermann;Tisch:1;0178454587, usw.
    Alles ist mit einem Simikolon getrennt.

    Möchte mir nun in einer MSGBOX die Anzahl anzeigen lassen, wie oft in der gesammten Listbox, Tisch:1 steht.

    Wer eine Idee?
    @Otti Appende alle Items an einen StringBuilder und suche darin Deinen String. Sorge dafür, dass der Abschluss eines Zeichens ein Trennzeichen ist.
    Wenn Du nur Tisch suchen willst, kannst Du am Trennzeichen splitten, das Array sortieren und Deinen String zählen oder halt mit LINQ.
    Wenn sich im Zielstring ein Trennzeichen befindet, mit LINQ.
    Natürlich kannst Du auch mit RegEx suchen, da hast Du die Anzahl sofort, aber da hab ich keine Ahnung.
    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!
    Zum Vorgehen:
    Wie kommst Du an den Inhalt eines ListBox-Item? Wenn Du es hast, hast Du einen String.
    Wie teilst Du den String an den "Sollbruchstellen" Semikolon? Mit DeinText.Split(";"c)
    Was bekommst Du dann? Ein String-Array, welches aus den Bruchstücken besteht.
    Was dann? Du schaust, ob Bruchstück Nummer 2 den gewünschten Text enthält. Wenn ja, zählst Du mit, sonst nicht.

    Aber: Wie kommen diese Rohdaten (sind ja nicht schön, daher roh) in die ListBox? Das sollte eigentlich so niemand zu Gesicht bekommen, wie es jetzt vorliegt.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed

    Hey...

    VB.NET-Quellcode

    1. For x As Integer = 0 To TagesMitglieder.Items.Count - 1
    2. If TagesMitglieder.Items(x).ToString.Contains("Tisch:1") Then
    3. Dim lines As String
    4. For Each line In lines
    5. Dim parts() As String = lines.ToString.Split(";"c)
    6. MsgBox(parts(1))
    7. Next
    8. End If
    9. Next


    hmm..... komm irgendwie nicht weiter, könntest mir bitte helfen?

    VB.NET-Quellcode

    1. Dim lines As String
    2. For Each line In lines
    ? Wie soll ein leerer String irgendwas enthalten?
    Ja, Du kannst auch einfach schreiben:

    VB.NET-Quellcode

    1. If TagesMitglieder.Items(x).ToString.Contains("Tisch:1") Then Tisch1Counter += 1
    und am Ende Tisch1Counter ausgeben und das war's. Die Frage mit den Rohdaten ist damit aber noch nicht beantwortet.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed
    Hey.
    Bezüglich der Daten, hast du recht, Diese werden im Vorfeld hinzugefügt. Im prinzip sieht diese niemand.

    Habe es noch mal anders versucht, allerdings bekomme ich da den ersten (bei = 0) eintrag angezeigt.
    Wollte ja die ganze Listbox durchgehen und die Anzahl aller "Tisch:1" haben...
    Hast noch eine Idee???

    VB.NET-Quellcode

    1. ​For x As Integer = 0 To TagesMitglieder.Items.Count - 1
    2. If TagesMitglieder.Items(x).ToString.Contains("Tisch:1") Then
    3. Dim ZeilenEintrag = TagesMitglieder.Items(x).ToString
    4. Dim DateninZeile() = ZeilenEintrag.Split(New String() {";"}, StringSplitOptions.RemoveEmptyEntries)
    5. MsgBox(DateninZeile(0))
    6. End If
    7. Next

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

    Wenn sie in einer ListBox sind, dann sind sie für den User in ihrer Rohform sichtbar/zugänglich. Warum sind sie dann in der ListBox, wenn niemand sie so sehen soll? Wenn sie irgendwo sein sollen, wo sie niemand sieht, aber verarbeitbar sein sollen, dann gehören sie z.B. in eine List(Of String) (als schlechteste der akzeptablen Lösungen). Besser wäre eine List(Of Gastronomietisch), wobei Gastronomietisch eine eigene Klasse mit den Eigenschaften: Tischnummer und Gast wäre, wobei dann wiederum Gast eine eigene Klasse mit den Eigenschaften Name und Telefonnumer wäre.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed

    Ich weis worauf du hinaus möchtest, allerdings ist es kein programm für eine öffentliche gastronomie, sondern für rein private zwecke in meinem partykeller.
    wärst du denn so nett und würdest mir noch einen Tip geben bzgl meinen letztem post??

    @VaporiZed
    Danke hab es hinbekomm

    VB.NET-Quellcode

    1. ​Dim Tisch1Counter As Integer
    2. For x As Integer = 0 To TagesMitglieder.Items.Count - 1 ' Alle Items durchgehen...
    3. If TagesMitglieder.Items(x).ToString.Contains("Tisch:1") Then
    4. Tisch1Counter += 1
    5. Dim ZeilenEintrag = TagesMitglieder.Items(x).ToString
    6. Dim DateninZeile() = ZeilenEintrag.Split(New String() {";"}, StringSplitOptions.RemoveEmptyEntries)
    7. Lanzahltisch1.Text = Tisch1Counter
    8. End If
    9. Next

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