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 02:49

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

Mesaj gönderen Dobreli »

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: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

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

Mesaj gönderen Lord_Ares »

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: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

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

Mesaj gönderen SimaWB »

Alternatif: StringReplace
There's no place like 127.0.0.1
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

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

Mesaj gönderen ertank »

Dobreli yazdı: 10 Oca 2018 04: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: 181
Kayıt: 01 Oca 2008 05:34

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

Mesaj gönderen Commandx »

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
http://www.neonhaber.com/Static/mega-co ... index.html
www.delphican.con
Function PARSE( text, ilk, son:String ): String; //
begin
Delete(Text, 1, pos(ilk, Text) + Length(ilk)-1);
Result := Copy(Text, 1, Pos(Son, Text)-1);
end;
Cevapla