Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Harf ve sayıları içinde farklı karakterleri ayıklama
#1
Merhaba;

Databaseden kayıtları alıp masaüstüne word olarak kaydediyorum. 

Dosya adını da databasedeki kayıt ismene göre alıyorum.
Fakat (a:s,e ' f A ^ ç ü ÜĞ) örnekteki gibi özel karakter kullanılmışsa dosya adında sorun yaşıyorum. 
Aşağıdaki kod ile çözmek istedim fakat yine çözüm olmadı. Yardımlarınızı rica ederim.

function Ayikla(Sayi: String): String;
var
  I: integer;
  S: String;
begin
  S := Trim(Sayi);
  Sayi := '';
  for I := 1 to Length(S) do
  begin
    if S[I] in ['a' .. 'z'] then
    begin
      if S[I] in ['A' .. 'Z'] then
      begin
        if S[I] in ['0' .. '9'] then
        begin
          Sayi := Sayi + S[I];
        end;
      end;
    end;
  end;
end;
Cevapla
#2
(22-12-2019, Saat: 12:43)BGNew Adlı Kullanıcıdan Alıntı: Merhaba;

Databaseden kayıtları alıp masaüstüne word olarak kaydediyorum. 

Dosya adını da databasedeki kayıt ismene göre alıyorum.
Fakat (a:s,e ' f A ^ ç ü ÜĞ) örnekteki gibi özel karakter kullanılmışsa dosya adında sorun yaşıyorum. 
Aşağıdaki kod ile çözmek istedim fakat yine çözüm olmadı. Yardımlarınızı rica ederim.

function Ayikla(Sayi: String): String;
var
  I: integer;
  S: String;
begin
  S := Trim(Sayi);
  Sayi := '';
  for I := 1 to Length(S) do
  begin
    if S[I] in ['a' .. 'z'] then
    begin
      if S[I] in ['A' .. 'Z'] then
      begin
        if S[I] in ['0' .. '9'] then
        begin
          Sayi := Sayi + S[I];
        end;
      end;
    end;
  end;
end;

[quote pid='33605' dateline='1577007796']
function Ayikla(Sayi: String): String;
var
  I: integer;
  S: String;
begin
  S := Trim(Sayi);
  Sayi := '';
  for I := 1 to Length(S) do
  begin
    if S[I] in ['a' .. 'z','A' .. 'Z', '0' .. '9'] then
    begin
          Sayi := Sayi + S[I];
    end;
  end;
end;


[/quote]
Cevapla
#3
ASCII karakter tablosunu inceleyin, türkçe karakterlerin a..z aralığında olmadığını göreceksiniz.
P.Safa:Yaşlanarak değil, yaşayarak tecrübe kazanılır.Zaman insanları değil,armutları olgunlaştırır
C.Yücel:Toprak gibi olmalısın! Ezildikçe sertleşmelisin!Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı
S.Canan:Bildiğini zannettiğin an hiç bir şey öğrenemezsin
Bilgi uçar
WWW
Cevapla
#4
function Ayikla(Sayi: String): String;
var
 I: integer;
 S: String;
begin
 S := Trim(Sayi);
 Sayi := '';
 for I := 1 to Length(S) do
 begin
   if S[I] in ['a' .. 'z','A' .. 'Z', '0' .. '9', 'Ç', 'Ş', 'Ğ', 'Ü', 'Ö', 'İ', 'ç', 'ş', 'ğ', 'ü', 'ö', 'ı'] then
   begin
         Sayi := Sayi + S[I];
   end;
 end;
 result := Sayi;
end;

Ufak bir değişiklik umarım iş görür kolay gelsin.
Cevapla
#5
(22-12-2019, Saat: 21:01)Javs Adlı Kullanıcıdan Alıntı:
function Ayikla(Sayi: String): String;
var
 I: integer;
 S: String;
begin
 S := Trim(Sayi);
 Sayi := '';
 for I := 1 to Length(S) do
 begin
   if S[I] in ['a' .. 'z','A' .. 'Z', '0' .. '9', 'Ç', 'Ş', 'Ğ', 'Ü', 'Ö', 'İ', 'ç', 'ş', 'ğ', 'ü', 'ö', 'ı'] then
   begin
         Sayi := Sayi + S[I];
   end;
 end;
 result := Sayi;
end;

Ufak bir değişiklik umarım iş görür kolay gelsin.

Merhaba,

Maalesef yukarıdaki fonksiyon hatalı. Derleyicinin size verdiği CharInSet kullanın tavsiyesi de hatalı. Buradaki asıl sorun şu: Her iki fonksiyon da [ ] arasındaki karakterleri byte'a çeviriyor. Dolayısıyla İ, ğ, Ğ gibi Türkçeye özel karakterlerin bir kısmı şartı sağlayamıyor. Kendiniz görmek isterseniz fonksiyonu 'iİüÜğĞ' stringini gönderin. 

Tavsiyem CASE kullanın. Okuması da kolay Smile Örnek aşağıda:

function Ayikla(Sayi: string): string;
var
 I: integer;
 S: string;
begin
 S := Trim(Sayi);
 Sayi := '';
 for I := 1 to Length(S) do
 begin
   case S[I] of
     'a'..'z',
     'A'..'Z',
     '0'..'9',
     'Ç', 'Ş', 'Ğ', 'Ü', 'Ö', 'İ', 'ç', 'ş', 'ğ', 'ü', 'ö', 'ı':
       begin
         Sayi := Sayi + S[I];
       end;
   end;
 end;
 Result := Sayi;
end;

İyi çalışmalar
Cevapla
#6
   

Hocam ben doğru sonucu aldım ama tabi sizin gösterdiğiniz yol daha doğrudur muhakkak.
Cevapla
#7
(23-12-2019, Saat: 14:01)Javs Adlı Kullanıcıdan Alıntı: Hocam ben doğru sonucu aldım ama tabi sizin gösterdiğiniz yol daha doğrudur muhakkak.

Merhaba,

Aslında önceki mesajıma girip düzeltecektim, ama sonra vazgeçtim Smile Benim yaptığım uyarı ve düzeltme Delphi 2009 ve üstü sürümler için geçerlidir. Yani Unicode string'lerin varsayılan string biçim olduğu sürümler.

Size de tavsiyem, bir an önce modern bir Delphi sürümüne geçmenizdir Big Grin

İyi çalışmalar
Cevapla
#8
String yerine ANSIString tanımlarsanız sorun çözülebilir. String içindeki karakterleri program Unicode string zannedebiliyor.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Form yada panel içinde taşıma info@guzelceker.com 2 362 13-12-2019, Saat: 15:15
Son Yorum: ozcanm
  readcomponent içinde isim değiştirme info@guzelceker.com 0 234 28-11-2019, Saat: 11:04
Son Yorum: info@guzelceker.com
  Fonksiyon içinde create edilenler seci20 8 1.170 22-07-2019, Saat: 15:38
Son Yorum: Tuğrul HELVACI
  Form içinde exe nasıl çalıştırılır? Cyb3r 2 857 04-07-2019, Saat: 09:53
Son Yorum: Cyb3r
  fonksiyon içinde parametreye default değer atama sorunu adelphiforumz 6 1.101 24-05-2019, Saat: 11:20
Son Yorum: adelphiforumz



Konuyu Okuyanlar: 1 Ziyaretçi