Registriert seit: 4. Jun 2007
Ort: Potsdam
17 Beiträge
Delphi 2009 Enterprise
|
AW: Ersetzen von Umlauten bei groß geschriebenen Wörtern
2. Feb 2015, 17: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
|
|
Zitat
|