Prüfen, ob bei geschriebenem Wort der Akzent fehlt

  • VB.NET
  • .NET (FX) 4.0

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von KingTimon.

    Prüfen, ob bei geschriebenem Wort der Akzent fehlt

    Hi Leute,

    Ich steh mal wieder auf dem Schlauch.
    Ich bin dabei, einen Vokabeltrainer mit ein paar nützlichen Funktionen zu schreiben. Darunter soll auch eine Funktion kommen, die prüft, was genau falsch geschrieben wurde. Ich bin grad dabei, zu überprüfen, ob ma den Akzent auf dem "e" vergessen hat.

    Ich hab natürlich schon herumprobiert und so, aber mein Code funktioniert leider nur, wenn das nur ein "e" im geschriebenen Wort vorkommt.

    Das heißt: Ich schreibe statt beispielsweise "inglés" "ingles", zeigt er mir an, dass der Akzent fehlt
    Schreibe ich "este" (hier befinden sich zwei "e"s im Wort) statt "esté", wird mir nicht gesagt, dass der Akzent fehlt.

    Mein Code:

    VB.NET-Quellcode

    1. If Richtiges.Contains("é") Then
    2. If Richtiges.IndexOf("é") = Textbox_Eingabe.Text.IndexOf("e") Then
    3. Label_Fehlerart.Text = "Da sollte ein Akzent auf das " & Chr(34) & "e" & Chr(34)
    4. End If
    5. End if


    Kann mir hier jemand weiterhelfen? Wär wirklich nett.

    MFG
    Auf der Suche nach Coding-Kursen auf Lence.at
    Du musst jedes e im String überprüfen.

    VB.NET-Quellcode

    1. Dim indexCounter As Integer
    2. For Each char In Textbox_Eingabe.Text
    3. If char.Equals("e"c) Then
    4. If Richtiges.IndexOf("é") = indexCounter Then
    5. ' ...
    6. End If
    7. End If
    8. indexCounter += 1
    9. Next


    Keine Ahnung ob das die beste Methode ist.
    KaskadekingDE on GitHub :)
    Bitte keine Fragen über Programmierung per PN! Dafür ist das Forum hier.

    Who cares? ¯\_(ツ)_/¯
    @ErfinderDesRades

    Danke für die Antwort

    Meinst du das so?

    VB.NET-Quellcode

    1. ​Dim indexCounter As Integer
    2. For Each c as char In Textbox_Eingabe.Text
    3. If c.Equals("e"c) Then
    4. If Richtiges.IndexOf("é", indexcounter) = indexCounter Then
    5. ' ...
    6. End If
    7. End If
    8. indexCounter += 1
    9. Next

    Meinst du das in etwa so? Also hab jetzt bei IndexOf als zweites Argument die Variable Indexcounter hinzugefügt, die festlegt, ab welcher Stelle im Text nach dem Zeichen gesucht wird.

    MFG

    PS: Bitte nicht lachen - ich versuch mein Bestes....
    Auf der Suche nach Coding-Kursen auf Lence.at
    Solange du nicht weißt, was eine Überladung ist, brauchst du nichts versuchen.
    Sondern lies im gegebenen Link nach, was eine Überladung ist.

    Wenn du es dann weißt, dann suche im ObjectBrowser die IndexOf-Überladung auf, die du schon in post#1 benutztest - die war nämlich verkehrt, aber nicht soo verkehrt, wie was du jetzt rumprobierst.
    Die anderen Überladungen sind freundlicherweise an genau derselben Stelle im OB zu finden, wo die Überladung zu finden ist, die du verwendet hast.
    So ist das mit Überladungen: die stehen alle ganz dicht beieinander.

    Zum ObjectBrowser gibts auch einiges in Erfahrung zu bringen: VisualStudio richtig nutzen (Google ist nicht deine Mami)
    Ach den Link gab ich dir ja bereits - scheint keinerlei Spuren bei dir hinterlassen zu haben - hmm.

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

    @ErfinderDesRades ich hab den Artikel durchgelesen und dein Video angeschaut. Immerhin bin ich für jede nützliche Antwort dankbar!

    Wenn ichs richtig verstanden hab, ist eine Überladung, wenn ein Sub oder eine Function verschiedene Möglichkeiten hat, Parameter einzusetzen.

    Ich versuche schon eine Zeit lang, einen richtigen Ansatz für mein Problem zu finden, aber für mich ist das nicht ganz so leicht^^

    MFG
    Auf der Suche nach Coding-Kursen auf Lence.at

    KingTimon schrieb:

    Wenn ichs richtig verstanden hab, ist eine Überladung, wenn ein Sub oder eine Function verschiedene Möglichkeiten hat, Parameter einzusetzen.
    Komisch - ich kann mich nicht erinnern, auch nur entfernt ähnliches in Grundlagen: Fachbegriffe zu behaupten.
    Eine Überladung ist einfach eine andere Methode, mit demselben Namen, aber mit anderen Parametern.
    Und wie gesagt: ZB im ObjectBrowser - aber auch auf MSDN stehen Überladungen immer sehr nahe beieinander.
    Also wenn man sich die Mühe macht, die Doku von IndexOf aufzusuchen, so stolpert man zwangsläufig über alle deren Überladungen.
    Und dieses Stolpern ist überaus gewinnbringend - du kannst da nämlich eine Überladung aussuchen, die genau das tut, was du brauchst: Nämlich Groß- und Klein-Buchstaben nicht zu unterscheiden.


    Ups - ich glaub fast, ich hab das Problem die ganze Zeit falsch verstanden.

    KingTimon schrieb:

    eine Funktion kommen, die prüft, was genau falsch geschrieben wurde.
    Dafür brauchst du zuerstmal eine annere Funktion, die herausfindet, was überhaupt falsch geschrieben wurde.
    Dafür habe ich diese eierlegende Wollmilchsau geproggt:

    VB.NET-Quellcode

    1. Public Function FirstDifference(ParamArray texts() As String) As Integer
    2. Dim commonLength = texts.Min(Function(s) s.Length)
    3. Dim ubound = texts.Count - 1
    4. For retVal = 0 To commonLength - 1
    5. Dim cmp = texts(0)(retVal)
    6. For ii = 1 To ubound
    7. If Not texts(ii)(retVal).Equals(cmp) Then Return retVal
    8. Next
    9. Next
    10. Return commonLength
    11. End Function
    Die gibt dir die Position des ersten Unterschieds mehrerer Strings zurück. kannst du so verwenden:

    VB.NET-Quellcode

    1. If Richtiges <> Textbox_Eingabe.Text Then
    2. Dim i = FirstDifference(Richtiges, Textbox_Eingabe.Text)
    3. Dim c1 = Richtiges(i), c2 = Textbox_Eingabe.Text(i)
    4. 'hier den genauen Unterschied ausbaldowern
    5. If c1 = "é"c AndAlso c2 = "e"c Then
    6. MessageBox.Show("Akzent fehlt")
    7. ElseIf c1 = "É"c AndAlso c2 = "E"c Then
    8. MessageBox.Show("Akzent fehlt")
    9. ElseIf c1 = "á"c AndAlso c2 = "a"c Then
    10. 'jo, und das kann noch lange so weiter gehen.
    11. ' Für o, i, u, und für ` auch - nicht zu vergessen ^, um nur die Akzente so leidlich zu erwähnen.
    12. '...
    13. End If
    14. End If
    Mir scheint das grad eine Mammut-Aufgabe, alle Möglichkeiten, etwas falsch zu schreiben, individuell zu behandeln - willst du die Idee nicht vlt. nochmal überdenken?
    @ErfinderDesRades danke für die Antwort

    Das mit der Überladung hab ich wohl falsch ausgedrückt, aber hab ich schon so gemeint.

    Dein Code, den du hier grad gepostet hast, ist anders als mein Ansatz, aber scheint richtig zu funktionieren.
    Ich hab in der Zeit auch noch ein bisserl herumgetüftelt.

    VB.NET-Quellcode

    1. If Richtiges.Contains("é") Then
    2. If Textbox_Eingabe.Text.Chars(Richtiges.IndexOf("é")) = "e" Then
    3. Label_Fehlerart.Text = "Da sollte ein Akzent auf das " & Chr(34) & "e" & Chr(34)
    4. End If
    5. End If

    Kann dieser Code auch funktionieren?

    erfinderdesrades schrieb:

    ​Mir scheint das grad eine Mammut-Aufgabe, alle Möglichkeiten, etwas falsch zu schreiben, individuell zu behandeln - willst du die Idee nicht vlt. nochmal überdenken?

    Der Vokabeltrainer soll in erster Linie dem Benutzer helfen, schneller seine Vokabeln zu lernen. Ich werde nicht jeden einzelnen Fehler definieren, aber ich will mein Projekt so gut wie möglich umsetzen, und meine Ideen darin verwirklichen. Klingt nicht wirklich professionell, aber ich bin ja noch am Lernen.

    MFG
    Auf der Suche nach Coding-Kursen auf Lence.at

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

    KingTimon schrieb:

    Kann dieser Code auch funktionieren?
    Wie gesagt: Da liegt ein Konzept-Fehler vor.
    Du musst unterscheiden zwischen dem Suchen des Fehlers und der Untersuchung der Art des Fehlers.
    Den Fehler findeste recht einfach - siehe meine Funktion - einfach die Position suchen, wo beide sich unterscheiden.

    Und danach sind "nur noch" 2 Zeichen zu untersuchen, nämlich das richtige und das falsche.

    Dein Code manscht schon wieder beides zusammen, und das kann nix werden.
    Was ist zB mit été - da sind 2 és drinne.
    @ErfinderDesRades Soviel ich weiß, gibts höchstens einen Akzent pro Wort, oder? Der Akzent gibt vor, welche Silbe eines Wortes betont wird. Mir wärs neu, dass es mehrere Akzente pro Wort gibt.

    MFG
    Auf der Suche nach Coding-Kursen auf Lence.at
    Ok dann lass ich französisch auch nicht unter den Tisch fallen^^

    Auf jeden Fall danke für die große Hilfe @ErfinderDesRades!

    MFG
    Auf der Suche nach Coding-Kursen auf Lence.at