Türkçe için ektegre ettiğiniz kod ile ilgili sorun var.
Kod: Tümünü seç
Siz bizim osmanlılaştıramadıklarımızdan mısınız? Yoksa Osmanlılaştıramadıklarımızdan mısınız?
değerini aşağıdaki gibi dönüştürüyor
Kod: Tümünü seç
SIQ BIQIM OSMANLıLASTıRAMADıKLARıMıQDAN MıSıNıQ? YOKSA OSMANLıLASTıRAMADıKLARıMıQDAN MıSıNıQ?
Diğer paylaştığınız kodların amacınn orjinal soru ile aynı olduğunu düşünüyorum. Buna istinaden aşağıdaki noktalarda mantık hatası olabilir diye uyarmak istedim:
(1):
koşulu hiçbir zaman sağlanmaz. Çünkü bu noktada IlkHarf değişkeni içinde en az 4 karakter olduğunu biliyoruz.
(2):
Kod: Tümünü seç
Result := UpperCase(IlkHarf[1]);
for I := 2 to Length(IlkHarf) do
if Pos(IlkHarf[I - 1], ' ') > 0 then
Yukarıda ilk karakter boşluk ise direk Result içine ekliyor. Ayrıca aynı karakteri tekrar for döngüsünde kontrol ediyor
(3):
Gelen IlkHarf değeri bir noktada iki veya daha fazla boşluk karakteri içeriyor ise aşağıdaki kod hatalı çalışacaktır
Kod: Tümünü seç
if Pos(IlkHarf[I - 1], ' ') > 0 then
begin
Result := Trim(Result + UpperCase(IlkHarf[I]));
end;
Mutlaka tek fonksiyon içinde yapmak isiyorsanız aşağıdaki şekilde deneyebilirsiniz.
Kod: Tümünü seç
function GetOzelId2(const Value: string): string;
function GetLatinLetters(const Value: string): string;
var
i: Integer;
begin
Result := Value;
for I := 1 to Length(Result) do
begin
case Result[i] of
'İ': Result[i] := 'I';
'ı': Result[i] := 'i';
'Ş': Result[i] := 'S';
'ş': Result[i] := 's';
'Ğ': Result[i] := 'G';
'ğ': Result[i] := 'g';
'Ç': Result[i] := 'C';
'ç': Result[i] := 'c';
'Ü': Result[i] := 'U';
'ü': Result[i] := 'u';
'Ö': Result[i] := 'O';
'ö': Result[i] := 'o';
end;
end;
end;
const
Numbers = ['0'..'9'];
var
List: TStringList;
LocalValue: string;
TempChar: Char;
i: Integer;
begin
LocalValue := Trim(Value);
if LocalValue = EmptyStr then Exit(EmptyStr);
List := TStringList.Create();
try
List.Delimiter := ' ';
List.DelimitedText := LocalValue;
Result := EmptyStr;
for i := 0 to List.Count-1 do
begin
if List[i] <> EmptyStr then
begin
TempChar := List[i][1];
TempChar := GetLatinLetters(TempChar)[1];
TempChar := UpperCase(TempChar)[1];
if (Ord(TempChar) >= 65) and (Ord(TempChar) <= 90) then
Result := Result + TempChar;
end;
end;
finally
List.Free();
end;
end;