Eğitim Mh. Ahsen Çıkmazı Sk. Sadıkoğlu 5 Plaza No:12/41
Hasanpaşa, Kadıköy - İstanbul / Türkiye

Edit'te Türkçe Karakter Sorunu

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.

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ğı;

 

Uğur PARLAYAN

1976 İstanbul doğumlu yazar, yeniliğe ve teknolojiye karşı aşırı ilgisi nedeniyle ortaokul yıllarında tanıştığı programlamayı profesyonel düzeyde devam ettirmektedir. 2005 yılından bu yana perakende, hukuk, lojistik ve makine haberleşmesi konuları başta olmak üzere çeşitli masaüstü ve internet tabanlı yazılımlar geliştirmiştir. Öğrenmenin, yeniliklere açık olmanın bu mesleğin temel taşlarından birisi olduğunun farkında olan yazarımız 2016 Yılında Rubicube Yazılım, Donanım ve Teknoloji Hizmetleri Limited Şirketini kurmuş ve çalışmalarını bu şemsiye altında devam etmektedir.

Yorum yapabilmek için giriş yapmalısınız