Umlaute austauschen +

PingOfDeath1983

Grünschnabel
Hallo ;-)

Heute ist nicht mein Tag - daher hoffe ich ihr könnt mir helfen?

Problem:
- Umlaute (ö, ü, ä) sollen durch Oe etc. ersetz werden.
- Es soll etweder Ue oder UE eingesetz werden - das ist abhängig von:
- ÜBEN --> ÜEBEN
- Üben --> Üeben
(abhängig vom nächsten Buchstaben --> groß/klein?)

Ich habe es hiermit versucht:


Code:
  Function Umlaute_OE(ByVal data As String) As String

        'Dim Umlaute_Array() As String = {"Ä", "AE", "Ö", "OE", "Ü", "UE", "ä", "ae", "ö", "oe", "ü", "ue", "ß", "ss", "@", "*"} ' 16
        Dim Umlaute_Array() As String = {"Ä", "Ö", "Ü", "ä", "ö", "ü"} '12 Zeichen
        Dim Umlaute_Array_tausch() As String = {"A", "O", "U", "a", "o", "u"}
        Dim t As Integer
        Dim neuerString As String
        Dim Umlaut As Boolean

        If data = "" Then data = " " ' kein leerer String

        neuerString = ""
        Dim charArray As Char() = CType(data, Char())

        For i = 0 To Len(data) ' TEXT
            MsgBox(Len(data))
            Umlaut = False
            For t = 0 To 5 ' TEXT mit Umlauten - Zeichen für Zeichen
                'MsgBox(charArray(i) + "   " + Umlaute_Array(t))
                If (charArray(i) = Umlaute_Array(t)) Then
                    Umlaut = True
                End If

                If Umlaut = True Then
                    neuerString = neuerString + charArray(i) 'HIER FEHLT NOCH ETWAS
                Else
                    neuerString = neuerString + charArray(i) 'HIER FEHLT NOCH ETWAS
                End If
            Next
        Next

        'For i = 0 To 14 ' Anzahl Werte im Array + 2
        'SUCHE = Umlaute_Array(i)
        'ERSETZE = Umlaute_Array(i + 1)
        'data = Replace(data, SUCHE, ERSETZE)
        'i = i + 1
        'Form1.Label6.Text = Umlaute_Array(i)
        'Next

        Return neuerString
    End Function

Bekomme aber immer die Fehlermeldung, dass der Bereich überschritten wird - der Index, das kann ich mir aber nicht erklären ,,,,

Gruß, PingOfDeath

* HIER FEHLT NOCH ETWAS .... kann ich selber machen und ist nicht Teil der Frage
 
Ich hab mal kurz den Code so geschrieben, dass er das von dir gewünschte macht:
Visual Basic:
Function Umlaute_OE(ByVal data As String) As String

 Dim Umlaute_Array(), i As Integer
 Umlaute_Array = Array("Ä", "AE", "Ö", "OE", "Ü", "UE", "ä", "ae", "ö", "oe", "ü", "ue", "ß", "ss", "@", "*")
 If data = "" Then Exit Function
 
 For i = 0 To 15 Step 2
  SUCHE = Umlaute_Array(i)
  ERSETZE = Umlaute_Array(i + 1)
  data = Replace(data, SUCHE, ERSETZE)
 Next i

Umlaute_OE = data
End Function


Der Doc!
 
Danke ;-)

Soweit war ich ja auch schonmal (auskommentierter Code), das Problem ist jetzt das ich zusätzlich eine Fallunterscheidung machen möchte.

Wenn ich z.B. diesen Satz habe :

HEUTE KÖNNTE ICH HEULEN

... dann ersetz mir Dein/mein Code es folgendermaßen:

HEUTE KOeNNTE ICH HEULEN

... bei ... "Heute könnte ich heulen", wäre es wiederrum richtig - das Problem ist also, ist der Rest vom Wort in Großbuchstaben?

Trotzdem danke ;-)
 
Hallo,

mein Vorschlag überprüft einfach, ob der Folge-Buchstabe groß geschrieben ist und reagiert entsprechend darauf.

Die Prüfung der Groß-/Kleinschreibung habe ich mit regulären Ausdrücken gelöst.
Visual Basic:
Dim arrUmlaute(), arrErsatz()
arrUmlaute = Array("Ä", "Ü", "Ö")
arrErsatz = Array("A", "U", "O")
Dim myStr$, i%, curChar$
Dim rExp As New RegExp
rExp.Pattern = "[A-Z]"
myStr = Text1.Text
For i = 0 To UBound(arrUmlaute)
    curChar = arrUmlaute(i)
    Do
        If Not InStr(myStr, curChar) = 0 Then
            If rExp.Test(Mid(Text1.Text, InStr(myStr, curChar) + 1, 1)) Then
                myStr = Replace(myStr, curChar, arrErsatz(i) & "E", , 1)
            Else
                myStr = Replace(myStr, curChar, arrErsatz(i) & "e", , 1)
            End If
            Text1.Text = myStr
        End If
    Loop Until InStr(myStr, curChar) = 0
Next i

Ich habe mal nur "Ä", "Ü" und "Ö" genommen, denn die kleinen Umlaute kann man ja vorher pauschal ersetzten, denn ich gehe mal davon aus, dass Fälle wie "Heute köNnte ich heulen" o.ä. nicht auftreten.

Schau' mal, ob Du damit was anfangen kannst...

Gruß
 
Also, ich hab den Code getestet, bei mir hat er aus dem Satz HEUTE KÖNNTE ICH HEULEN korrekt das HEUTE KOENNTE ICH HEULEN gemacht. Dem System ist es ja egal, was für Buchstaben sonst noch drin sind, hast du da irgendwo vielleicht einen Schreibfehler drinnen?


Der Doc!
 
Moin Doc,

Dein code ersetzt natürlich einwandfrei, nur was PingOfDeath1983 meint, ist, das z.B. beim Wort "Üben" für das "Ü" "Ue" eingesetzt wird und bei "ÜBEN" für's "Ü" eben "UE". Also wenn ich das jetzt richtig verstanden habe...
 
@ Ein_Freund - richtig - so wie Du es erklärt/programmiert hast meinte ich das. DrSoong´s Code funktioniert natürlich auch, allerdings nicht für meinen speziellen Fall.

Vielen Dank Euch beiden!

Gruß, PingOfDeath
 

Neue Beiträge

Zurück