Bir Cümledeki Sesli Harfleri Çıkarıp Sadece Sessiz Harfleri Bırakma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Dobreli
Üye
Mesajlar: 9
Kayıt: 31 Ara 2017 01:49

Bir Cümledeki Sesli Harfleri Çıkarıp Sadece Sessiz Harfleri Bırakma

Mesaj gönderen Dobreli » 10 Oca 2018 03:47

Final sorularımdan biriydi fakat çözemedim. Kafaya taktım ve çözmeye çalışıyorum. Öncelikle Delphi7 Mevcut bende. Amacımızı kısaca özetlemek gerekirse örneğin edite girilen bir cümleyi aynı edit içinde sadece sesiz harfleri bırakmak.
Adana kebap güzeldir.
d n k b p g z ld r.
Şeklinde olması gerekiyor. Benim yazdığım hem uzun hemde tam anlamıyla çalışmıyor. Ve programda yazılan kod harici farklı bir kodla örnek vermezseniz benim için daha iyi olur. Amacım bu programı hangi yöntem ile kısaltabiliriz? Birde merak ettiğim Pos' da birden fazla karakter aratmanın yolu var mı?('a,A' şeklinde bir arama gibi. Denediğimde hiçbir şey olmuyor. )
Vereceğiniz her türlü cevap için şimdiden teşekkür ediyorum. Yanlış veya hatam varsa kusura bakmayın.
viewtopic.php?f=2&t=29991&p=164558&hili ... rf#p164558 Adlı konudan bu sorunun çözümüne ulaşılabilir mi ?( edit3.text(i) kullanılarak.)
unluharf:=('a','A','e','E',......)=şeklinde tanım yapabilirmiyiz ?

Kod: Tümünü seç

procedure TForm1.Button6Click(Sender: TObject);
var
byeri:integer;
kelime:string;
begin
memo1.Clear;
if  while (pos('A',edit3.Text)>0)   do
  begin
   byeri:=(pos('A',edit3.Text))  ;
   kelime:=copy(edit3.Text,1,byeri-1);
   label8.caption:=kelime;
   memo1.Lines.add(kelime);
   edit3.Text:=copy(edit3.Text,byeri+1,length(edit3.Text)-byeri);

  end;

    while pos('E',edit3.Text)>0  do
  begin
   byeri:=pos('E',edit3.Text);
   kelime:=copy(edit3.Text,1,byeri-1);
   label8.caption:=kelime;
   memo1.Lines.add(kelime);
   edit3.Text:=copy(edit3.Text,byeri+1,length(edit3.Text)-byeri);
   end;

      while pos('İ',edit3.Text)>0  do
  begin
   byeri:=pos('İ',edit3.Text);
   kelime:=copy(edit3.Text,1,byeri-1);
   label8.caption:=kelime;
   memo1.Lines.add(kelime);
   edit3.Text:=copy(edit3.Text,byeri+1,length(edit3.Text)-byeri);
   end;
      while pos('I',edit3.Text)>0  do
  begin
   byeri:=pos('I',edit3.Text);
   kelime:=copy(edit3.Text,1,byeri-1);
   label8.caption:=kelime;
   memo1.Lines.add(kelime);
   edit3.Text:=copy(edit3.Text,byeri+1,length(edit3.Text)-byeri);
   end;
      while pos('U',edit3.Text)>0  do
  begin
   byeri:=pos('U',edit3.Text);
   kelime:=copy(edit3.Text,1,byeri-1);
   label8.caption:=kelime;
   memo1.Lines.add(kelime);
   edit3.Text:=copy(edit3.Text,byeri+1,length(edit3.Text)-byeri);
   end;
      while pos('Ü',edit3.Text)>0  do
  begin
   byeri:=pos('Ü',edit3.Text);
   kelime:=copy(edit3.Text,1,byeri-1);
   label8.caption:=kelime;
   memo1.Lines.add(kelime);
   edit3.Text:=copy(edit3.Text,byeri+1,length(edit3.Text)-byeri);
   end;
      while pos('O',edit3.Text)>0  do
  begin
   byeri:=pos('O',edit3.Text);
   kelime:=copy(edit3.Text,1,byeri-1);
   label8.caption:=kelime;
   memo1.Lines.add(kelime);
   edit3.Text:=copy(edit3.Text,byeri+1,length(edit3.Text)-byeri);
   end;
      while pos('Ö',edit3.Text)>0  do
  begin
   byeri:=pos('Ö',edit3.Text);
   kelime:=copy(edit3.Text,1,byeri-1);
   label8.caption:=kelime;
   memo1.Lines.add(kelime);
   edit3.Text:=copy(edit3.Text,byeri+1,length(edit3.Text)-byeri);
   end;
      while pos('a',edit3.Text)>0  do
  begin
   byeri:=pos('a',edit3.Text);
   kelime:=copy(edit3.Text,1,byeri-1);
   label8.caption:=kelime;
   memo1.Lines.add(kelime);
   edit3.Text:=copy(edit3.Text,byeri+1,length(edit3.Text)-byeri);
   end;
      while pos('e',edit3.Text)>0  do
  begin
   byeri:=pos('e',edit3.Text);
   kelime:=copy(edit3.Text,1,byeri-1);
   label8.caption:=kelime;
   memo1.Lines.add(kelime);
   edit3.Text:=copy(edit3.Text,byeri+1,length(edit3.Text)-byeri);
   end;
      while pos('ı',edit3.Text)>0  do
  begin
   byeri:=pos('ı',edit3.Text);
   kelime:=copy(edit3.Text,1,byeri-1);
   label8.caption:=kelime;
   memo1.Lines.add(kelime);
   edit3.Text:=copy(edit3.Text,byeri+1,length(edit3.Text)-byeri);
   end;
      while pos('i',edit3.Text)>0  do
  begin
   byeri:=pos('i',edit3.Text);
   kelime:=copy(edit3.Text,1,byeri-1);
   label8.caption:=kelime;
   memo1.Lines.add(kelime);
   edit3.Text:=copy(edit3.Text,byeri+1,length(edit3.Text)-byeri);
   end;
      while pos('u',edit3.Text)>0  do
  begin
   byeri:=pos('u',edit3.Text);
   kelime:=copy(edit3.Text,1,byeri-1);
   label8.caption:=kelime;
   memo1.Lines.add(kelime);
   edit3.Text:=copy(edit3.Text,byeri+1,length(edit3.Text)-byeri);
   end;
      while pos('ü',edit3.Text)>0  do
  begin
   byeri:=pos('ü',edit3.Text);
   kelime:=copy(edit3.Text,1,byeri-1);
   label8.caption:=kelime;
   memo1.Lines.add(kelime);
   edit3.Text:=copy(edit3.Text,byeri+1,length(edit3.Text)-byeri);
   end;
      while pos('o',edit3.Text)>0  do
  begin
   byeri:=pos('o',edit3.Text);
   kelime:=copy(edit3.Text,1,byeri-1);
   label8.caption:=kelime;
   memo1.Lines.add(kelime);
   edit3.Text:=copy(edit3.Text,byeri+1,length(edit3.Text)-byeri);
   end;
      while pos('ö',edit3.Text)>0  do
  begin
   byeri:=pos('ö',edit3.Text);
   kelime:=copy(edit3.Text,1,byeri-1);
   label8.caption:=kelime;
   memo1.Lines.add(kelime);
   edit3.Text:=copy(edit3.Text,byeri+1,length(edit3.Text)-byeri);
   end;





  memo1.lines.add(edit3.Text);
end;

end.


Lord_Ares
Üye
Mesajlar: 1058
Kayıt: 15 Eki 2006 03:33
Konum: Çorlu

Re: Bir Cümledeki Sesli Harfleri Çıkarıp Sadece Sessiz Harfleri Bırakma

Mesaj gönderen Lord_Ares » 10 Oca 2018 11:55

Merhaba,
Yapmak istediğin işlem için Delphide String fonksiyonların bir çoğunu kullanabilirsin. Örneğin AnsiReplaceText gibi.. Fakat bu fonksiyonlar, kontrolleri düzgün yapılmaz ise bazen küçük büyük harf ve sesli sessiz harflerde atlayıp sorun çıkarabiliyor. Size kolay ve anlaşılır olması açısından ben pos fonksiyonu ile göstermek istedim. (Diğer fonksiyonlarda aranacak harfleri tek tek belirtip döngüye sokup işi uzatmamak için böyle birşey yaptım )

Kod: Tümünü seç

Function Sesli_Harf_Sil(Kelime:String) : String;
Const
   sesliharfler:String='aeıioöuüAEIİOÖUÜ';
Var
  I :Integer;
Begin
  For I:=1 To Length(Kelime) Do
  While Pos(Kelime[I],sesliharfler)>0 do delete(Kelime,I,1);
  Result:=Kelime;
End;

Kullanımı

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text:= Sesli_Harf_Sil(Edit1.Text);
end;


Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1311
Kayıt: 07 May 2009 09:42
Konum: İstanbul
İletişim:

Re: Bir Cümledeki Sesli Harfleri Çıkarıp Sadece Sessiz Harfleri Bırakma

Mesaj gönderen SimaWB » 10 Oca 2018 12:21

Alternatif: StringReplace
There's no place like 127.0.0.1

ertank
Üye
Mesajlar: 1230
Kayıt: 11 Eyl 2015 11:45

Re: Bir Cümledeki Sesli Harfleri Çıkarıp Sadece Sessiz Harfleri Bırakma

Mesaj gönderen ertank » 10 Oca 2018 09:14

Dobreli yazdı:
10 Oca 2018 03:47
Final sorularımdan biriydi fakat çözemedim. Kafaya taktım ve çözmeye çalışıyorum. Öncelikle Delphi7 Mevcut bende. Amacımızı kısaca özetlemek gerekirse örneğin edite girilen bir cümleyi aynı edit içinde sadece sesiz harfleri bırakmak.
Adana kebap güzeldir.
d n k b p g z ld r.
Şeklinde olması gerekiyor. Benim yazdığım hem uzun hemde tam anlamıyla çalışmıyor. Ve programda yazılan kod harici farklı bir kodla örnek vermezseniz benim için daha iyi olur. Amacım bu programı hangi yöntem ile kısaltabiliriz? Birde merak ettiğim Pos' da birden fazla karakter aratmanın yolu var mı?('a,A' şeklinde bir arama gibi. Denediğimde hiçbir şey olmuyor. )
Vereceğiniz her türlü cevap için şimdiden teşekkür ediyorum. Yanlış veya hatam varsa kusura bakmayın.
viewtopic.php?f=2&t=29991&p=164558&hili ... rf#p164558 Adlı konudan bu sorunun çözümüne ulaşılabilir mi ?( edit3.text(i) kullanılarak.)
unluharf:=('a','A','e','E',......)=şeklinde tanım yapabilirmiyiz ?

Kod: Tümünü seç

procedure TForm1.Button6Click(Sender: TObject);
var
byeri:integer;
kelime:string;
begin
memo1.Clear;
if  while (pos('A',edit3.Text)>0)   do
  begin
   byeri:=(pos('A',edit3.Text))  ;
   kelime:=copy(edit3.Text,1,byeri-1);
   label8.caption:=kelime;
   memo1.Lines.add(kelime);
   edit3.Text:=copy(edit3.Text,byeri+1,length(edit3.Text)-byeri);

  end;

    while pos('E',edit3.Text)>0  do
  begin
   byeri:=pos('E',edit3.Text);
   kelime:=copy(edit3.Text,1,byeri-1);
   label8.caption:=kelime;
   memo1.Lines.add(kelime);
   edit3.Text:=copy(edit3.Text,byeri+1,length(edit3.Text)-byeri);
   end;

      while pos('İ',edit3.Text)>0  do
  begin
   byeri:=pos('İ',edit3.Text);
   kelime:=copy(edit3.Text,1,byeri-1);
   label8.caption:=kelime;
   memo1.Lines.add(kelime);
   edit3.Text:=copy(edit3.Text,byeri+1,length(edit3.Text)-byeri);
   end;
      while pos('I',edit3.Text)>0  do
  begin
   byeri:=pos('I',edit3.Text);
   kelime:=copy(edit3.Text,1,byeri-1);
   label8.caption:=kelime;
   memo1.Lines.add(kelime);
   edit3.Text:=copy(edit3.Text,byeri+1,length(edit3.Text)-byeri);
   end;
      while pos('U',edit3.Text)>0  do
  begin
   byeri:=pos('U',edit3.Text);
   kelime:=copy(edit3.Text,1,byeri-1);
   label8.caption:=kelime;
   memo1.Lines.add(kelime);
   edit3.Text:=copy(edit3.Text,byeri+1,length(edit3.Text)-byeri);
   end;
      while pos('Ü',edit3.Text)>0  do
  begin
   byeri:=pos('Ü',edit3.Text);
   kelime:=copy(edit3.Text,1,byeri-1);
   label8.caption:=kelime;
   memo1.Lines.add(kelime);
   edit3.Text:=copy(edit3.Text,byeri+1,length(edit3.Text)-byeri);
   end;
      while pos('O',edit3.Text)>0  do
  begin
   byeri:=pos('O',edit3.Text);
   kelime:=copy(edit3.Text,1,byeri-1);
   label8.caption:=kelime;
   memo1.Lines.add(kelime);
   edit3.Text:=copy(edit3.Text,byeri+1,length(edit3.Text)-byeri);
   end;
      while pos('Ö',edit3.Text)>0  do
  begin
   byeri:=pos('Ö',edit3.Text);
   kelime:=copy(edit3.Text,1,byeri-1);
   label8.caption:=kelime;
   memo1.Lines.add(kelime);
   edit3.Text:=copy(edit3.Text,byeri+1,length(edit3.Text)-byeri);
   end;
      while pos('a',edit3.Text)>0  do
  begin
   byeri:=pos('a',edit3.Text);
   kelime:=copy(edit3.Text,1,byeri-1);
   label8.caption:=kelime;
   memo1.Lines.add(kelime);
   edit3.Text:=copy(edit3.Text,byeri+1,length(edit3.Text)-byeri);
   end;
      while pos('e',edit3.Text)>0  do
  begin
   byeri:=pos('e',edit3.Text);
   kelime:=copy(edit3.Text,1,byeri-1);
   label8.caption:=kelime;
   memo1.Lines.add(kelime);
   edit3.Text:=copy(edit3.Text,byeri+1,length(edit3.Text)-byeri);
   end;
      while pos('ı',edit3.Text)>0  do
  begin
   byeri:=pos('ı',edit3.Text);
   kelime:=copy(edit3.Text,1,byeri-1);
   label8.caption:=kelime;
   memo1.Lines.add(kelime);
   edit3.Text:=copy(edit3.Text,byeri+1,length(edit3.Text)-byeri);
   end;
      while pos('i',edit3.Text)>0  do
  begin
   byeri:=pos('i',edit3.Text);
   kelime:=copy(edit3.Text,1,byeri-1);
   label8.caption:=kelime;
   memo1.Lines.add(kelime);
   edit3.Text:=copy(edit3.Text,byeri+1,length(edit3.Text)-byeri);
   end;
      while pos('u',edit3.Text)>0  do
  begin
   byeri:=pos('u',edit3.Text);
   kelime:=copy(edit3.Text,1,byeri-1);
   label8.caption:=kelime;
   memo1.Lines.add(kelime);
   edit3.Text:=copy(edit3.Text,byeri+1,length(edit3.Text)-byeri);
   end;
      while pos('ü',edit3.Text)>0  do
  begin
   byeri:=pos('ü',edit3.Text);
   kelime:=copy(edit3.Text,1,byeri-1);
   label8.caption:=kelime;
   memo1.Lines.add(kelime);
   edit3.Text:=copy(edit3.Text,byeri+1,length(edit3.Text)-byeri);
   end;
      while pos('o',edit3.Text)>0  do
  begin
   byeri:=pos('o',edit3.Text);
   kelime:=copy(edit3.Text,1,byeri-1);
   label8.caption:=kelime;
   memo1.Lines.add(kelime);
   edit3.Text:=copy(edit3.Text,byeri+1,length(edit3.Text)-byeri);
   end;
      while pos('ö',edit3.Text)>0  do
  begin
   byeri:=pos('ö',edit3.Text);
   kelime:=copy(edit3.Text,1,byeri-1);
   label8.caption:=kelime;
   memo1.Lines.add(kelime);
   edit3.Text:=copy(edit3.Text,byeri+1,length(edit3.Text)-byeri);
   end;





  memo1.lines.add(edit3.Text);
end;

end.

Merhaba,

Pos() ile birden fazla karakter aratmanız mümkün değil. Ancak Pos() ile bir kelimeyi bir paragraf içinde aratabilirsiniz.

Bağlantısını verdiğiniz örnek gidişatı doğru, ancak büyük küçük harf duyarlı olmadığı için belli koşullarda hatalı sonuçlar çıkaracak bir örnektir.

Yapmak istediğinizi yazdığınız koda benzer şekilde aşağıdaki gibi yapmanız mümkün.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
const
  SesliHarfler = 'aeıioöuüAEIİOÖUÜ';
var
  I: Integer;
begin
  Edit2.Text := EmptyStr;

  for I := 1 to Length(Edit1.Text) do
  begin
    if Pos(Edit1.Text[I], SesliHarfler) = 0 then
    begin
      Edit2.Text := Edit2.Text + Edit1.Text[I];
    end;
  end;
end;
Verdiğiniz örnek bağlantıya istinaden aşağıdaki şekilde yapmanız da mümkün:

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
const
  SesliHarfler = ['a', 'e', 'ı', 'i', 'o', 'ö', 'u', 'ü', 'A', 'E', 'I', 'İ', 'O', 'Ö', 'U', 'Ü'];
var
  I: Integer;
begin
  Edit2.Text := EmptyStr;

  for I := 1 to Length(Edit1.Text) do
  begin
    if Edit1.Text[I] in SesliHarfler then
    begin
      Edit2.Text := Edit2.Text + Edit1.Text[I];
    end;
  end;
end;
Şahsen ikinci örnekteki kodun ilk örneğe göre daha hızlı çalışmasını beklerim.

Pos() fonksiyonu büyük küçük harf duyarlıdır. a ve A harfleri Pos() için farklıdır.

Büyük/küçük harf dönüşümleri zaman kaybettirici işlemlerdir. Ayrıca Türkçe büyük ve küçük harf dönüşümlerinde küçük "ı" ve büyük "İ" harfleri çoğunlukla hatalı büyük/küçük harfe dönüştürülür. Son Delphi sürümlerinde bu sorun bir nebze giderilmiştir. Kullandığınız Delphi 7 ile normal koşullarda yine hatalı sonuç verecektir.

Kullanıcı avatarı
Commandx
Üye
Mesajlar: 140
Kayıt: 01 Oca 2008 05:34

Re: Bir Cümledeki Sesli Harfleri Çıkarıp Sadece Sessiz Harfleri Bırakma

Mesaj gönderen Commandx » 28 Ara 2018 12:47

Kod: Tümünü seç

const
  SesliHarfler = ['b', 'c', 'ç', 'd', 'f', 'g', 'ğ', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r','s', 'ş', 't', 'v', 'x', 'y', 'z', 'q','B', 'C', 'Ç', 'D', 'F', 'G', 'Ğ', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R','S', 'Ş', 'T', 'V', 'X', 'Y', 'Z', 'Q','1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '-', '/', '*', '(', ')', '!','.', '=', '_' , ';' , ':', '$', '%', '[', ']'];
var
  I: Integer;
begin
  Edit2.Text := EmptyStr;

  for I := 1 to Length(Edit1.Text) do
  begin
    if Edit1.Text[I] in SesliHarfler then
    begin
      Edit2.Text := Edit2.Text + Edit1.Text[I];
    end;
  end;

end;
Biraz Düzenledim.
http://www.delphibasics.co.uk/RTL.asp?Name=DaysBetween
Zamane tickcount'u
except
ON E: Exception do
Begin
Application.MessageBox(Pchar('Can sıkıntısı '+#13+E.Message),'Hata',MBOKk+MB_ICONWARNING);
Abort;
End;
end;

Cevapla