Einzelnen Beitrag anzeigen

Ackerjan

Registriert seit: 4. Jun 2007
Ort: Potsdam
17 Beiträge
 
Delphi 2009 Enterprise
 
#20

AW: Ersetzen von Umlauten bei groß geschriebenen Wörtern

  Alt 2. Feb 2015, 16:30
Meine Implementierung ohne Gewehr.

Code:
function UpperLowerReplaceString(aText, aFromText, aToUpperText, aToLowerText: String): String;

    function IsLowerCaseChar(c: Char): Boolean;
    const
        cLowerCharacters = 'abcdefghijklmnopqrstuvwxyzäöü';
    begin
        Result := (Pos(c, cLowerCharacters) > 0);
    end;

    function IsUpperCaseChar(c: Char): Boolean;
    const
        cUpperCharacters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ';
    begin
        Result := (Pos(c, cUpperCharacters) > 0);
    end;

var
    Pos: Integer;
    Upper: Boolean;
    weiter: Boolean;
begin
    Pos := 1;
    while Pos <> 0 do
    begin
        Pos := PosEx(aFromText, aText, Pos);
        weiter := True;
        Upper := False;
        if (Pos <> 0) then
        begin
            if weiter and (Pos < length(aText)) and IsLowerCaseChar(aText[Pos + 1]) then
            begin
                //kleiner Buchstabe nach dem Umlaut
                Upper := False;
                weiter := False;
            end;

            if weiter and (Pos < length(aText)) and IsUpperCaseChar(aText[Pos + 1]) then
            begin
                //großer Buchstabe nach dem Umlaut
                Upper := True;
                weiter := False;
            end;

            if weiter and (Pos > 1) and IsUpperCaseChar(aText[Pos - 1]) then
            begin
                //großer Buchstabe vor dem Umlaut / ß
                Upper := True;
                weiter := False;
            end;

            Delete(aText, Pos, 1);

            if Upper then
                Insert(aToUpperText, aText, Pos)
            else
                Insert(aToLowerText, aText, Pos);
        end;
    end;
    Result := aText;
end;

function OhneUmlaute(_string: String): String;
begin
    _string := ansiReplaceStr(_string, 'ä', 'ae');
    _string := ansiReplaceStr(_string, 'ü', 'ue');
    _string := ansiReplaceStr(_string, 'ö', 'oe');
    // Wichtig ist an dieser Stelle, dass ß zuerst ersetzt wird,
    _string := UpperLowerReplaceString(_string, 'ß', 'SS', 'ss');
    _string := UpperLowerReplaceString(_string, 'Ä', 'AE', 'Ae');
    _string := UpperLowerReplaceString(_string, 'Ü', 'UE', 'Ue');
    _string := UpperLowerReplaceString(_string, 'Ö', 'OE', 'Oe');
    Result := _string;
end;
Jan
Niemals aufgeben, niemals kapitulieren! - galaxy quest
  Mit Zitat antworten Zitat