Ausgabe, welche Zeichen wie häufig in der Textbox vorkommen.

  • VB.NET

Es gibt 35 Antworten in diesem Thema. Der letzte Beitrag () ist von Holywarrior1.

    @thefiloe Hier ging es um meinen Code. :D

    Holywarrior1 schrieb:

    aber das funktioniert einfach nicht
    Da hast Du was falsch gemacht.

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. Dim dc As New Dictionary(Of Char, Integer)
    3. Dim txt = "abcdefghijklmnopqrstuvwxyz "
    4. For Each c In txt
    5. dc.Add(c, 0) ' Dictionary aufbauen (ggf. noch Sonderzeichen
    6. Next
    7. Dim wort = "Ich bin ein sehr alter Mann".ToLower
    8. For Each c In wort
    9. dc(c) += 1 ' Buchstaben zählen
    10. Next
    11. MessageBox.Show(dc("a"c).ToString)
    12. End Sub

    Bilder
    • Anzahl.png

      21,48 kB, 694×254, 61 mal angesehen
    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!
    Der gibt das nicht im Label aus.
    Ich hab mir mein Programm so vorgestellt:

    Die Label hab ich selber beschrieben, der soll das nämlich automatisch zählen. Nur weiß ich nicht wie das geht :).
    Bilder
    • Unbenannt.PNG

      21,47 kB, 692×769, 64 mal angesehen

    Holywarrior1 schrieb:

    der soll das nämlich automatisch zählen.
    Das macht er auch. :thumbsup:
    Such mal in Deinem Code nach "80" und "79".
    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!
    Ich weiß, dass es um deinen Code geht @RodFromGermany jedoch bastelt ihr herum obwohl schon eine funktionierende Lösung dort steht (welche nebenbei bemerkt noch wesentlich kürzer ist).


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.

    thefiloe schrieb:

    welche nebenbei bemerkt
    von @Holywarrior1 nicht verstanden wird.
    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!
    Naja. Dann kann man fragen. Und außerdem ist es meistens so, dass die Lösung nur funktionieren muss und man diese gar nicht näher verstehen will.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Ich muss meinen Code verstehen, und ich verstehe ihn auch (allgemein, nicht die 10 Zeilen hier). :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!
    Letzter Versuch: Ausgabe, welche Zeichen wie häufig in der Textbox vorkommen.
    EDIT: Frage beantwortet! Ich mache einfach mehrere Labels

    Bitte, bitte, bitte, bitte nicht @Holywarrior1. Du kannst nicht für jedes mögliche Zeichen der vielen hundert Zeichen ein neues Label anlegen. Nimm ein einziges Label... siehe folgender Code:

    VB.NET-Quellcode

    1. Label1.Text = Rtxt_editor.Text.GroupBy(Function(x) x).[Select](Function(x) [String].Format("'{0}': {1}", x.Key, x.Count())).Aggregate(Function(current, [next]) current & Environment.NewLine & [next])




    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „thefiloe“ ()

    thefiloe schrieb:

    Letzter Versuch: Ausgabe, welche Zeichen wie häufig in der Textbox vorkommen.
    EDIT: Frage beantwortet! Ich mache einfach mehrere Labels

    Bitte, bitte, bitte, bitte nicht @Holywarrior1. Du kannst nicht für jedes mögliche Zeichen der vielen hundert Zeichen ein neues Label anlegen. Nimm ein einziges Label... siehe folgender Code:

    VB.NET-Quellcode

    1. Label1.Text = Rtxt_editor.Text.GroupBy(Function(x) x).[Select](Function(x) [String].Format("'{0}': {1}", x.Key, x.Count())).Aggregate(Function(current, [next]) current & Environment.NewLine & [next])




    Omg, ich danke dir! Es hat echt geklappt! Das mit den ganzen Labels wäre auch viel zu umständlich, hehe.
    Nunja. Den Code habe ich bereits 10 Posts zuvor gepostet...
    PS: Würde dir empfehlen kein Label zu verwenden. Es gibt verdammt viele Zeichen und das Label wird dadurch verdammt lang. Würde eher eine Textbox verwenden und diese ReadOnly machen. Da kann man scrollen.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    @thefiloe Ja, hatte damit paar Probleme, aber jetzt gehts ja, hehe :D. Hätte noch eine Frage zu deinem Code.

    VB.NET-Quellcode

    1. txt_anzahl_zeichen_ausgabe.Text = (Rtxt_editor.Text.GroupBy(Function(x) x).[Select](Function(x) [String].Format("'{0}': {1}", x.Key, x.Count())).Aggregate(Function(current, [next]) current & Environment.NewLine & [next]))


    Was bewirken die einzelnen Sachen? Muss das nämlich noch kommentieren.

    EDIT 2: Hab es nun geschafft die Textbox zu sortieren:

    VB.NET-Quellcode

    1. Dim a As Array = txt_anzahl_zeichen_ausgabe.Lines
    2. Array.Sort(a)
    3. txt_anzahl_zeichen_ausgabe.Lines = CType(a, String())


    Lg holywarrior1

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Holywarrior1“ ()

    Kann mir jemand sagen, was das bewirkt?

    VB.NET-Quellcode

    1. txt_anzahl_zeichen_ausgabe.Text = (Rtxt_editor.Text.GroupBy(Function(x) x).[Select](Function(x) [String].Format("'{0}': {1}", x.Key, x.Count())).Aggregate(Function(current, [next]) current & Environment.NewLine & [next]))
    Also: Der Text der Textbox ist eine Auflistung aller Zeichen im Text. Jetzt kannst du die GroupBy-Methode. Diese Gruppiert diese Auflistung nach allen gleichen Elementen. In diesem Fall hast du x Zeichen im als Text. Die GroupBy-Methode macht Gruppen und schiebt alle gleichen Elemente zusammen. Dadurch bekommst du Gruppen welche einen Key haben. Der Key ist dabei der Buchstabe (also das Kriterium nach welchem gruppiert wurde). Zusätzlich beinhaltet die Gruppe eine Auflistung aller Zeichen in der Gruppe. z.B. Hast du den Text "aaabb". Jetzt gruppierst du diesen und bekommst zwei Gruppen. Eine Gruppe mit dem Key "a" und einer Auflistung von 3 "a"s und eine Gruppe mit Key "b" und 2 "b"s.
    Als nächstes kommt die Select-Methode. Dort kannst du einen Code definieren welcher für jede Gruppe etwas zurückgibt. In diesem Fall wird hier der Text generiert der dann im Label steht.
    Wir haben also beide Gruppen. Und diese werden jetzt von der Select-Methode verwendet. Dort kannst du angeben was du mit diesen beiden Gruppen machen willst. x ist dabei eine Gruppe. Der Code nimmt also eine Gruppe, nimmt den Key der Gruppe und zählt die Elemente der Gruppe. Das heißt: Key = "a" und x.Count() gibt 3 (da, 3"a"s in der Gruppe sind). Daraus wird jetzt ein String gemacht. Dafür verwende ich die [String].Format-Methode. Das ist das gleiche wie "'"& x.Key &"': " & x.Count(). Dabei wird eben das {0} durch x.Key ersetzt und {1} durch x.Count(). Also ergibt das bei der ersten Gruppe 'a': 3. Dies wird automatisch für beide Gruppen ausgeführt. Wenn du 20 Gruppen hast, dann wird das eben für 20 Gruppen ausgeführt. Somit gibt die Select-Methode eine "Liste" mit allen Zeilen zurück. Also in diesem Fall eine Liste mit den Elementen ​'a': 3 und ​'b': 2.
    Als nächstes kommt die Aggregate-Methode. Diese ist nur noch dafür da, alle Elemente der Liste zu einem String zusammenzufassen und immer einen Zeilenumbruch einzufügen. In diesem Beispiel wird mit Gruppe 1 begonnen (dies wird zu "current") und Gruppe 2 wird zu "next". Diese beiden Strings (also 'a': 3 und 'b': 2) werden jetzt durch einen Zeilenumbruch (siehe Environment.NewLine) verbunden. Wenn du mehr als nur 2 Gruppen hättest. z.B. noch eine 3. Gruppe mit Key=c und dem Inhalt von einem c, dann wäre ja der String ​'c': 1, dann würde dies eben auch noch angehängt werden. Siehe dazu auch stackoverflow.com/questions/71…egate-algorithm-explained


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.