Bestimmtes Zeichen zählen?

  • VB.NET

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

    Bestimmtes Zeichen zählen?

    Hi leute :D

    Ich hab schon verzweifelt das Forum und Google durchsucht, aber nichts gefunden, daher hoffe ich, ihr könnt mir helfen.
    Undzwar will ich in ner RichTextBox das zeichen "#" zählen. Das Ergebnis soll in ner MsgBox ausgegeben werden. Hoffe ihr könnt mir helfen! Geht das überhaupt?

    MfG:)
    Natürlich geht das.

    VB.NET-Quellcode

    1. Dim Counter As Integer
    2. For Each Zeichen As Char In RichTextBox.Text
    3. If Zeichen = "#"c Then
    4. Counter += 1
    5. End If
    6. Next
    Bsp.:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. MessageBox.Show(Zeichenzaehlen("#"c, RichTextBox1))
    3. End Sub
    4. Private Function Zeichenzaehlen(ByVal Zeichen As Char, ByVal RTB As RichTextBox) As Integer
    5. Dim Zaehler As Integer = 0 ' Zähler für das # Zeichen
    6. For Each c As Char In RTB.Text.ToCharArray ' Geht jedes Zeichen der RTB durch und prüft ob es eine # ist
    7. If c = Zeichen Then ' Prüft das Zeichen
    8. Zaehler += 1 ' Erhöht Zähler um 1
    9. End If
    10. Next
    11. Return Zaehler ' Gibt Zähler retour
    12. End Function


    Ist die erweiterte Möglichkeit von haiyyu. Hier kannst du die RTB und das zu suchende Zeichen angeben.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten

    haiyyu schrieb:

    Natürlich geht das.

    VB.NET-Quellcode

    1. Dim Counter As Integer
    2. For Each Zeichen As Char In RichTextBox.Text
    3. If Zeichen = "#"c Then
    4. Counter += 1
    5. End If
    6. Next
    also meine code lautet so:

    VB.NET-Quellcode

    1. Dim GesWort As String = TextBox1.Text
    2. For Each Item As String In Form2.ListBox1.Items
    3. If Item.Contains(GesWort) Then
    4. Else
    5. Dim Counter As Integer
    6. For Each Zeichen As Char In RichTextBox1.Text
    7. If Zeichen = "#"c Then
    8. Counter += 1
    9. End If
    10. Next
    11. MsgBox(Counter, MsgBoxStyle.Information, "")
    12. End If
    13. Next


    Wie kann ich die schleife beenden, weil da immer msgboxen kommen, bei denen der inhalt verdoppelt wird?

    MfG
    Pack die MsgBox aus der Schleife raus :D

    VB.NET-Quellcode

    1. Dim GesWort As String = TextBox1.Text
    2. For Each Item As String In Form2.ListBox1.Items
    3. If Item.Contains(GesWort) Then
    4. Else
    5. Dim Counter As Integer
    6. For Each Zeichen As Char In RichTextBox1.Text
    7. If Zeichen = "#"c Then
    8. Counter += 1
    9. End If
    10. Next
    11. End If
    12. Next
    13. MsgBox(Counter, MsgBoxStyle.Information, "")
    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!
    Ok danke :)

    Aber in einer Textbox und in eniem label steht dann eine ganz andere zahl, und in der msgbox ist es die richtige zahl... was nun?

    MfG

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Michi M“ () aus folgendem Grund: Edit

    Nehm mal den Code hier:

    VB.NET-Quellcode

    1. Dim GesWort As String = TextBox1.Text
    2. For Each Item As String In Form2.ListBox1.Items
    3. If Item.Contains(GesWort) Then
    4. Else
    5. Dim Counter As Integer
    6. For Each Zeichen As Char In RichTextBox1.Text
    7. If Zeichen = "#"c Then
    8. Counter += 1
    9. End If
    10. Next
    11. End If
    12. Next
    13. MsgBox(Counter, MsgBoxStyle.Information, "")
    14. CounterTextBox1.Text = Counter.ToString

    Wenn das nicht geht, dann ist bei dir was falsch.
    nein das geht nicht :(

    mein code:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim Counter As Integer
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    4. If TextBox1.Text <> "" Then
    5. Dim GesWort As String = TextBox1.Text
    6. For Each Item As String In Form2.ListBox1.Items
    7. If Item.Contains(GesWort) Then
    8. Else
    9. For Each Zeichen As Char In RichTextBox1.Text
    10. If Zeichen = "#"c Then
    11. Counter += 1
    12. End If
    13. Next
    14. End If
    15. Next
    16. MsgBox(Counter, MsgBoxStyle.Information, "")
    17. TextBox1.Text = Counter.ToString
    18. End If
    19. End Sub
    20. End Class

    MfG

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

    Das schöne an "LINQ": Man "beschreibt" einfach, was man will ...

    VB.NET-Quellcode

    1. Private Sub foo()
    2. Dim dummy As New ListBox
    3. With dummy.Items
    4. .Add("John##Doe")
    5. .Add("#Jane#Doe#")
    6. .Add("Darth Vader")
    7. .Add("Luke # Skywalker")
    8. End With
    9. ' Select entries in Listbox that do NOT contain "jane" in ANY form and then count
    10. ' the number of "#" in the selected strings
    11. ' Expected result would be: 3
    12. Dim NumberOfHashes As Integer = (From word As String
    13. In dummy.Items
    14. Where word.IndexOf("jANe", StringComparison.InvariantCultureIgnoreCase) < 0
    15. Select (
    16. (From character As String In word Where character.Equals("#") Select 1).Sum)
    17. ).Sum
    18. If NumberOfHashes <> 3 Then MessageBox.Show("Error in reality.sys! Restart universe.exe?")
    19. End Sub
    Erstens steht da ein Kommentar, zweitens ist LINQ weitgehend sprechend, also drittens WAS GENAU verstehst du nicht?

    SELECT s AS String in l -> Nimm jedes Element aus der Liste "l", nenne es "s" und betrachte es als String
    WHERE bedingung -> Aber nur wenn die Bedingung erfüllt ist!
    SELECT 1 -> Immer dann, wähle eine 1 und speichere sie (irgendwo)
    .SUM -> und jetzt bilde die Summe der soeben erzeugten Liste aus Einsen