Hecelerin veritabanına gönderilmesi

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
egoiste_rain
Üye
Mesajlar: 14
Kayıt: 02 Tem 2009 11:29

Hecelerin veritabanına gönderilmesi

Mesaj gönderen egoiste_rain »

merhaba...
programım girilen metinleri aralarına "-" işareti koyarak ayırmaktadır.

Örnek olarak dosyadan eklettiğim bir metni şu şekilde ayırmaktadır;

Ca-mi-nin- av-lu-su -hın-ca -hınç -do-luy-du. -Bel-li -ki -ce-na-ze-nin -ya-kın-la-rı- o-nu -son -yol-cu-lu-ğu-na- u-ğur-la-mak, -dost-la-rı -da -son -gö-rev-le-ri-ni- i-fa- et-mek- i-çin- o-ra-day-dı-lar.-Sah-te -göz-ya-şı -dö-ken-ler,-ka-ra -göz-lük-le-rin- ar-dın-da -ce-na-ze-ye -ge-len-le-ri- in-ce-le-yen-ler-,ağ-la-ma-ma-sı-nı -ka-ra -göz-lük-ler-le- ört-me-ye -ça-lı-şan-lar,-be-de-nen- o-ra-da- a-ma -ru-hen -çok- u-zak-ta-ki- o-lan-lar,”-Ya-hu -tam -da- ö-le-cek -za-ma-nı -bul-du.-Bu-gün -de -çok- ö-nem-li- iş-le-rim -var-dı.-Ça-buk -bit-se -de -git-sem” -di-yen-ler...

şimdi ben bu heceleri tek tek veritabanına kaydetmek istiyorum.kafamda kurduğum şey "-" işaretinden öncesini alıp eklemesi
fakat bu nasıl anlatacağım bir türlü beceremedim..
yardım ederseniz çok sevinirim..
yusuf simsek
Üye
Mesajlar: 330
Kayıt: 09 Mar 2004 11:18
Konum: Konya
İletişim:

Re: Hecelerin veritabanına gönderilmesi

Mesaj gönderen yusuf simsek »

procedure HeceKaydet( ACumle : string );
var
sHece,
sTemp : string;

begin
sTemp := ACumle;

while not ( sTemp <> '' ) do
begin
sHece := Copy ( sTepm, 1, Pos('-',sTemp) );
(* sHece değişkenini veritabanına kaydet... *)

sTemp := Copy( sTemp, (Lenth(sHece)), Length(sTemp) - Lengh(sHece) );
end;
end;

procedure Button1( sender : TObject);
begin
HeceKaydet('Ca-mi-nin- av-lu-su -hın-ca -hınç -do-luy-du. -Bel-li -ki -ce-na-ze-nin -ya-kın-la-rı- o-nu -son -yol-cu-lu-ğu-na- u-ğur-la-mak');
end;
Şimdi tam hatırlamıyorum ama benzer bir yapıyı kullanmıştım. Umarım fikir verir.
Bugün bir kez daha,
Hiç Birşey Bilmediğimi Öğrendim!!!

https://extrayazilim.com
egoiste_rain
Üye
Mesajlar: 14
Kayıt: 02 Tem 2009 11:29

Re: Hecelerin veritabanına gönderilmesi

Mesaj gönderen egoiste_rain »

çok teşekkür ederim..

veritabanına göndermeden önce listboxda denedim fakat boşluk ve noktalama işaretleri nedeniyle doğru çalışmıyor.

boşluk,nokta,virgül,ünlem vs. bunları yok etme silme işlemini nasıl gerçekleştiririrm.?.
egoiste_rain
Üye
Mesajlar: 14
Kayıt: 02 Tem 2009 11:29

Re: Hecelerin veritabanına gönderilmesi

Mesaj gönderen egoiste_rain »

i:=0;
while i<memo1.lines count do
begin
if copy(memo1.lines,1,1)='' then
else
inc(i);
...
şeklinde yaptığımda sadece boş satırları siliyor karakter karakter silmek için ne yapmak gerekiyor?
khanco
Üye
Mesajlar: 226
Kayıt: 01 Eki 2007 04:39
Konum: İzmir
İletişim:

Re: Hecelerin veritabanına gönderilmesi

Mesaj gönderen khanco »

System.Delete(hece, Pos('.', hece), 1);

hece string değişken hecedeki noktayı siler.
silmek istediğin karakteri değiştirdikçe istediğini siler.
boşluk silme Trim.
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: Hecelerin veritabanına gönderilmesi

Mesaj gönderen emin_as »

Kod: Tümünü seç

  strliste:=TStringlist.Create; 
  strliste.Delimiter := '-';
  strliste.StrictDelimiter:=True;
  strliste.DelimitedText :=metin1; // - ile hecelenmiş yazı metin1 de

  for i:=0 to strliste.count-1 do
    kaydethece (strliste[i]);
Yukarıdaki kod metin1 olarak verilen yazıyı - ile ayırır. Kaydethece adlı fonksiyona tek tek hecelenmiş yazıları gönderir.
Eğer . , ve boşlukları da temizlemek istiyorsan şunu yapmalısın.

Kod: Tümünü seç

function strtemizle(s1:string):string;
begin
   result:=trim(stringreplace(s1,',','',[]); // virgulleri siler
   result:=trim(stringreplace(result,'.','',[]); // noktayı siler
   result:=trim(stringreplace(result,' ','',[]); // boşlukları siler
end;
...
  kaydethece(strtemizle(strliste[i]);
...
egoiste_rain
Üye
Mesajlar: 14
Kayıt: 02 Tem 2009 11:29

Re: Hecelerin veritabanına gönderilmesi

Mesaj gönderen egoiste_rain »

emin_as yazdı:

Kod: Tümünü seç

  strliste:=TStringlist.Create; 
  strliste.Delimiter := '-';
*  strliste.StrictDelimiter:=True;
  strliste.DelimitedText :=metin1; // - ile hecelenmiş yazı metin1 de

  for i:=0 to strliste.count-1 do
    kaydethece (strliste[i]);
Yukarıdaki kod metin1 olarak verilen yazıyı - ile ayırır. Kaydethece adlı fonksiyona tek tek hecelenmiş yazıları gönderir.
Eğer . , ve boşlukları da temizlemek istiyorsan şunu yapmalısın.

Kod: Tümünü seç

function strtemizle(s1:string):string;
begin
   result:=trim(stringreplace(s1,',','',[]); // virgulleri siler
   result:=trim(stringreplace(result,'.','',[]); // noktayı siler
   result:=trim(stringreplace(result,' ','',[]); // boşlukları siler
end;
...
  kaydethece(strtemizle(strliste[i]);
...
slmlar..
ilk olarak;
strliste.StrictDelimiter:=True; buranın doğru olduğuna emin misiniz bir çok şey denedim fakat olmuyor. :(
ayrıca ben bu boşluk ve noktalama işaretleri için şu şekilde yaptım..
buton2nin click olayına
begin
while i<memo2.lines.count do
if copy(memo2.lines,1,1)=' ' then memo2.lines.delete(i)
else
inc(i);
s1:=memo2.text;
memo2.text:=trim(stringreplace(s1,',','',[]);
memo2.text:=trim(stringreplace(result,'.','',[]);
memo2.text:=trim(stringreplace(result,' ','',[]);
end;
butona metinin sonuna gelinceye kadar tıklamam gerekiyor.1defada tüm boşlukları silmiyor.. ayrıca boşluk dışındaki işlemler çalışmıyor..
ben kodlama konusunda çok yeniyim deneme yanılma yöntemi ve örneklerle ile kodları kodlamayı öğrenmeye çalışıyorum
mantık hatası kodlama hatası yapmış olabilirim.. yardımlarınızı bekliyorum.
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: Hecelerin veritabanına gönderilmesi

Mesaj gönderen emin_as »

Tüm boşlukları silmek için stringreplace(s1,' ','',[rfReplaceAll]) şeklinde denemelisin. RfreplaceAll tümünü birden değiştirir.

StrictDelimiter ayırıcı ile ilgili işlemler için önemlidir, delphinin hangi versiyonunu kullandığını bilmiyorum, ama yeni versiyonlarda bu özelik var ve boşluk karakterinin ayırıc olarak görülmemesini sağlıyor. Eğer bu property yok hatası alıyorsan, önce tüm boşlukları stringreplace ile silip, daha sonra stringlist ile ayırmayı dene.
egoiste_rain
Üye
Mesajlar: 14
Kayıt: 02 Tem 2009 11:29

Re: Hecelerin veritabanına gönderilmesi

Mesaj gönderen egoiste_rain »

çok teşekkür ederim delphi 7 kullanıyorum..
memo2.text:=trim(stringreplace(result,' .','',[rfRepaceAll]); //nokta
memo2.text:=trim(stringreplace(result,',','',[rfRepaceAll]); //virgul
memo2.text:=trim(stringreplace(result,' ','',[rfRepaceAll]);//bosluk

burada nokta ve virgul u hiç görmüyor daha dogrusu bu islemlerin yerlerini değiştirdiğimizde son satırda hangi işaret var ise o işlemi gerçekleşttiriyor bunun sebebi ne?

her işaret için ayrı ayrı bunları yaptırsam tmm oluyor tüm noktalama işaretleri için bir buton gerekiyor o da cok saçma olur.

peki bu noktalama işaretlerinin klavyede ascii kod aralıklarını verip tümünü sildirme işlemi nasıl olur?
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: Hecelerin veritabanına gönderilmesi

Mesaj gönderen emin_as »

Kod: Tümünü seç

// cevrilecek yazip s1 ile geliyor
s1:=trim(stringreplace(s1,' .','',[rfRepaceAll]); //nokta
s1:=trim(stringreplace(s1,',','',[rfRepaceAll]); //virgul
s1:=trim(stringreplace(s1,' ','',[rfRepaceAll]);//bosluk
memo2.text:=s1;
Yukarıdaki kodu yazarsan sorun çözülür.
egoiste_rain
Üye
Mesajlar: 14
Kayıt: 02 Tem 2009 11:29

Re: Hecelerin veritabanına gönderilmesi

Mesaj gönderen egoiste_rain »

emin_as yazdı:

Kod: Tümünü seç

// cevrilecek yazip s1 ile geliyor
s1:=trim(stringreplace(s1,' .','',[rfRepaceAll]); //nokta
s1:=trim(stringreplace(s1,',','',[rfRepaceAll]); //virgul
s1:=trim(stringreplace(s1,' ','',[rfRepaceAll]);//bosluk
memo2.text:=s1;
Yukarıdaki kodu yazarsan sorun çözülür.
bu kodu yazdım memo2'nin içerisi tamamen silindi. :D
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: Hecelerin veritabanına gönderilmesi

Mesaj gönderen emin_as »

s1 e hecelenecek yaziyi aktardın mı?
egoiste_rain
Üye
Mesajlar: 14
Kayıt: 02 Tem 2009 11:29

Re: Hecelerin veritabanına gönderilmesi

Mesaj gönderen egoiste_rain »

evet memo2.text:=s1 şeklinde yaptım...
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: Hecelerin veritabanına gönderilmesi

Mesaj gönderen emin_as »

Stringreplace yapmadan önce heceleri ayrılacak yazıyı s1'e aktarman gerekiyor.
S1 e birşey aktarmazsan, sonuçta s1 de memo2.text e boş yazı aktarmış olur.
egoiste_rain
Üye
Mesajlar: 14
Kayıt: 02 Tem 2009 11:29

Re: Hecelerin veritabanına gönderilmesi

Mesaj gönderen egoiste_rain »

:S iyice karıştı kafam şimdi memo1deki yazıyı memo2ye değilde s1 e mi aktarmalıyım?
Cevapla