tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
7
ZUGRIFFE
2071
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Zuecho Zuecho ist offline Grünschnabel
    Registriert seit
    Apr 2007
    Beiträge
    4
    Hallo ich habe folgendes Problem:
    ich möchte in einer Textbox ein Text reinschreiben und es sollen die 5 häufigsten Buchstaben ausgetauscht werden. z.B. "Heute scheint die Sonne" und jetzt soll der Buchstabe "e" ersetzt werden mit "y" "Hyuty schyint diy Sonny".

    Wenn Ihr Ideen habt würde ich mich sehr freuen Danke.
     

  2. #2
    Avatar von DrSoong
    DrSoong DrSoong ist offline Iss was, Doc!
    tutorials.de Premium-User
    Registriert seit
    Jul 2003
    Ort
    Dem Zentrum meiner Welt
    Beiträge
    1.836
    Blog-Einträge
    85
    Dazu kennt VB den Befehl Replace(), sieht so aus:
    Code vb:
    1
    2
    3
    4
    5
    6
    7
    8
    
     'Vorher den Inhalt der Textbox in eine Variable
     sText = Text1.Text
     'Syntax:
     'Text = Replace(Text, Text der ersetzt werden soll, Text durch den ersetzt werden soll)
     'also in deinem Fall:
     sText = Replace(sText, "e", "y")
     'und wieder zurück in die Textbox
     Text1.Text = sText


    Der Doc!
     
    A: Hilfe, ich hab zwei Dateien hinzugefügt und nun sind die anderen weg
    B: Die Scrollbar da rechts ist dir schon mal aufgefallen?

  3. #3
    Zuecho Zuecho ist offline Grünschnabel
    Registriert seit
    Apr 2007
    Beiträge
    4
    Okay das ist schon mal gut.
    Aber dann ist ja noch das Problem mit den häufigsten Buchstaben austauschen wie bekomme ich das hin das er mir die 5 häufigsten Buchstaben austauscht.
    Also man muss doch irgendwie die Buchstaben zählen können mit einem Befehl?
     

  4. #4
    Avatar von kuhlmaehn
    kuhlmaehn kuhlmaehn ist offline Mitglied Platin
    Registriert seit
    May 2003
    Beiträge
    634
    Hi, ich hab im moment keine Ahnung ob das auch besser zu lösen ist aber ich hab mal eben was gemacht vielleicht hilft es dir ja.
    Es wird am Anfang alles zu kleinen Buchstaben geändert, da nur diese auf die häufigkeit überprüft werden (also von a-z), es wird nur das häufigste ersetzt und wenn keins am häufigsten ist wird das ersten genommen.
    Das ist aber bestimmt alles anpassbar. Hier dir function:

    Code vb:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    
    Function HoechstErs(Text, Ersatz)
     
    Dim Buchst(26)
     
    stri = LCase(Text) 'Lcase: macht alle Buchstaben klein
     
    For n = 1 To Len(stri)
     
        For m = 1 To 26
        
        If Mid(stri, n, 1) = Chr(96 + m) Then '96 ist das Zeichen vor dem a
        Buchst(m - 1) = Buchst(m - 1) + 1
        End If
        
        Next m
     
    Next n
     
    Dim hoechst
     
    For x = 0 To 25
     
        If Buchst(x) > Buchst(hoechst) Then hoechst = x 'vergleichen welches am höchsten ist
     
    Next x
     
    HoechstErs = Replace(stri, Chr(97 + hoechst), Ersatz)
     
    End Function

    aufrufen dann zB

    Code vb:
    1
    2
    3
    
    Private Sub Command1_Click()
    Text1.Text = HoechstErs(Text1.Text, "x")
    End Sub
    Also.. nicht wirklich sauber programmiert und bestimmt gibt es eine bessere Lösung
    Aber wenn du es anpassen willst müsstes du bei der "Überprüfstelle" anstelle von chr vielleicht doch dein Array manuell füllen mit allem was überprüft werden soll. Oder alles von 0-255, oder wie weit das reicht, nehmen.
    Und wenn du auch die 2. und 3. häufigsten willst würde ich das alles nochmal wiederholen aber vorher den höchsten Wert auf 0 setzen. Müsste leicht anzupassen sein.
    Achso und für den Fall, dass keins häufiger ist bräuchtest du noch eine Abfrage.
    Ich hoffe das hilft dir =)
     

  5. #5
    Avatar von Ein_Freund
    Ein_Freund Ein_Freund ist offline Mitglied Brokat
    Registriert seit
    Apr 2004
    Ort
    Essen
    Beiträge
    272
    Hallo Zuecho,

    hab' da auch mal einen Vorschlag. Die Komplexität beläuft sich hierbei lediglich auf die Anzahl der verschiedenen charackters im Original-String:
    Code vb:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    Dim charCount%
    Dim myStr$, newStr$, curChar$, savChar$
    myStr = LCase("Heute scheint die Sonne")
    newStr = myStr 'myStr bleibt unverändert; newStr wird verarbeitet
    charCount = 0
     
    Do
        curChar = Left(newStr, 1) 'aktueller Buchstabe
        newStr = Replace(newStr, curChar, "") 'aktueller Buchstabe wird entfernt
        If Len(myStr) - Len(Replace(myStr, curChar, "")) > charCount Then 'Anzahl des aktuellen Buchstaben ermitteln
            charCount = Len(myStr) - Len(Replace(myStr, curChar, "")) 'ggf. neue Anzahl speichern
            savChar = curChar 'entsprechenden Buchstaben speichern
        End If
    Loop Until newStr = ""
     
    MsgBox "Grösste Häufigkeit: " & charCount & " mal " & savChar
    MsgBox Replace(myStr, savChar, "y")

    Auch hier gilt: Sind mehrere Buchstaben mit der grössten Häufigkeit vorhanden, bleibt der erste Treffer gespeichert.

    Gruß
     
    Irren ist menschlich. Aber wer richtigen Mist bauen will, braucht einen Computer!
    (unbekannt )

    Bis irgendwann...

  6. #6
    Zuecho Zuecho ist offline Grünschnabel
    Registriert seit
    Apr 2007
    Beiträge
    4
    Okay danke für die Antworten damit werde ich wohl weiter kommen.
    Aber eine frage noch gibt es auch einen Lösungsweg mit Case also jetzt z.B "Case is a" , "Case is b" und so weiter weil das würde ich dann viel übersichtilicher finden.
    Also das immer die Anzahl von den Buchstaben in den jeweiligen Buchstaben gespeichert würd und dann am Ende ermittelt würd welche am häufigsten da sind.
     

  7. #7
    Zuecho Zuecho ist offline Grünschnabel
    Registriert seit
    Apr 2007
    Beiträge
    4
    Okay danke es Funtioniert jetzt so wie ich es mit gedacht habe aber eine Frage noch. Wie bekomme ich die Buchstaben am Ende wieder Groß die am Anfang Groß waren?
     

  8. #8
    Avatar von Ein_Freund
    Ein_Freund Ein_Freund ist offline Mitglied Brokat
    Registriert seit
    Apr 2004
    Ort
    Essen
    Beiträge
    272
    Wenn der Buchstabe mit der grössten Häufigkeit ermittelt wurde, ersetzt Du im Original-String einfach alle kleinen und alle grossen Buchstaben.


    Code vb:
    1
    2
    3
    4
    
    'savChar - Buchstabe mit der grössten Häufigkeit
    'angelehnt an die vorherigen posts  - ersetzen durch "y" bzw. "Y"
    myStr = Replace(myStr, savChar, "y")
    myStr = Replace(myStr, UCase(savChar, "Y"))

    Dazu darfst Du natürlich nicht den Original-String verändern, oder Du speicherst ihn vorher noch irgendwo zwischen...

    Gruß
     
    Irren ist menschlich. Aber wer richtigen Mist bauen will, braucht einen Computer!
    (unbekannt )

    Bis irgendwann...

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 01.06.10, 21:58
  2. Buchstaben durch andere ersetzen
    Von PH234X im Forum .NET Windows Forms
    Antworten: 2
    Letzter Beitrag: 09.01.09, 16:43
  3. Buchstaben durch entsprechende Bilder ersetzen
    Von therealcharlie im Forum PHP
    Antworten: 4
    Letzter Beitrag: 03.09.05, 13:23
  4. Buchstaben durch Grafiken ersetzen
    Von morgenstern im Forum PHP
    Antworten: 2
    Letzter Beitrag: 18.08.04, 20:04
  5. ersetzen von buchstaben in text
    Von Pago im Forum Delphi, Kylix, Pascal
    Antworten: 2
    Letzter Beitrag: 10.02.04, 17:22