Edit’te Türkçe Karakter Sorunu

Created with Sketch.

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

 

 

Yorum yapılmamış

Yorumunuzu ekleyin