Mühendislik Arşivi Yayın Tarihi: 30 Eylül 2019 • Yazar: Uğur Parlayan
Edit'te Türkçe Karakter Sorunu
#Programlama
#Soru-Cevap
#Alfabe
#AnsiChar
#Firemonkey
#Türkçe
#Pos
#UTF8
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, Harf) > 0 do
Harf, Harf)] := Degis;
Result := AnsiUpperCase(Harf) + 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, 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 := K; // 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, 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 := B;
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ğı;