
Edit’te Türkçe Karakter Sorunu
Soru
Kullanıcının Edit’e girdiği harflerin küçük harf olmasını sağlamak istiyorum. İlk harf büyük olacak fakat “İ” olası gerekirken “ı” olarak yazıyor. Türkçe karakterle ilgili sorunum var UTF-8’i araştırdım fakat Firemonkey’de çözüm bulamadım, yardımlarınızı rica ederim.
function degis(Harf: String): String;
const
Buyuk: String = 'ABCÇDEFGGHIİJKLMNOÖPRSŞTUÜVYZQW';
Degis: String = 'abcçdefgğhıijklmnoöprsştuüvyzqw';
var
N: Integer;
begin
for N := 1 to Length(Buyuk) do
while Pos(Buyuk[N], Harf) > 0 do
Harf[Pos(Buyuk[N], Harf)] := Degis[N];
Result := AnsiUpperCase(Harf[1]) + Copy(Harf, 2, Length(Harf));
end;
procedure TForm1.EditChangeTracking(Sender: TObject);
begin
if Edit.Text.Length > 0 then begin
Edit1.Text := degis(Edit1.Text);
end;
end;
Cevap
Belki daha efektif yazılabilirdi ama “degis” fonksiyonu yerine şöyle bir fonksiyon ile sorunu çözebilirsiniz;
function LowerCaseTR(aString: String; aBuyukBasHarf: Boolean = True): String;
const
K = 'aeirlıdknmyustboüşzghçğcvpöfjwx'; // Harflerin böyle sıralanmasının sebebi
B = 'AEİRLIDKNMYUSTBOÜŞZGHÇĞCVPÖFJWX'; // bunların Türkçedeki kullanım sıklıklarına göredir.
var
I: Integer; // Sayaç, indis değişkeni
X: Integer; // Bulunan harfin alfabedeki indis numarası
begin
Result := aString;
for I := 1 to Result.Length do begin // metni harf harf geziyoruz. (Bir rakam ile de karşılaşabiliriz...)
X := pos(Result[I], B); // POS, büyük / küçük harfe duyarlıdır (Case Sensitive). Yani büyükse küçüğü, küçükse büyüğü vermez.
if (X > 0) then Result[I] := K[X]; // Bulunan karakter alfabemizde varsa, küçüğüyle yer değiştiriyoruz.
end;
if (aBuyukBasHarf = True) then
for I := 1 to Result.Length do begin // Metni harf harf geziyoruz
X := pos(Result[I], K); // Burada harften başka bir karakter ile de karşılaşabiliriz
if (X > 0) then begin // O nedenle, bulunan karakter bir harf ise X, sıfırdan büyük olur...
Result[I] := B[X];
Exit; // İlk harfi büyüttükten sonra çıkıyoruz...
end;
end;
end;
Bilgi mahiyetinde Türkçe harflerin kullanım oranlarını gösteren bilgiler aşağıda yer alıyor.
Veri Kaynağı;
- http://www.wseas.us/e-library/conferences/2011/Cambridge/NEHIPISIC/NEHIPISIC-20.pdf
- http://www.wikizero.co/index.php?q=aHR0cHM6Ly90ci53aWtpcGVkaWEub3JnL3dpa2kvVMO8cmtfYWxmYWJlc2luZGVraV9oYXJmbGVyaW5fa3VsbGFuxLFtX3PEsWtsxLFrbGFyxLE
Yorum yapılmamış