Hecelerin veritabanına gönderilmesi
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Üye
- Mesajlar: 14
- Kayıt: 02 Tem 2009 11:29
Hecelerin veritabanına gönderilmesi
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..
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..
-
- Üye
- Mesajlar: 330
- Kayıt: 09 Mar 2004 11:18
- Konum: Konya
- İletişim:
Re: Hecelerin veritabanına gönderilmesi
Şimdi tam hatırlamıyorum ama benzer bir yapıyı kullanmıştım. Umarım fikir verir.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;
-
- Üye
- Mesajlar: 14
- Kayıt: 02 Tem 2009 11:29
Re: Hecelerin veritabanına gönderilmesi
ç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.?.
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.?.
-
- Üye
- Mesajlar: 14
- Kayıt: 02 Tem 2009 11:29
Re: Hecelerin veritabanına gönderilmesi
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?
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?
Re: Hecelerin veritabanına gönderilmesi
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.
hece string değişken hecedeki noktayı siler.
silmek istediğin karakteri değiştirdikçe istediğini siler.
boşluk silme Trim.
Re: Hecelerin veritabanına gönderilmesi
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]);
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]);
...
-
- Üye
- Mesajlar: 14
- Kayıt: 02 Tem 2009 11:29
Re: Hecelerin veritabanına gönderilmesi
slmlar..emin_as yazdı:Yukarıdaki kod metin1 olarak verilen yazıyı - ile ayırır. Kaydethece adlı fonksiyona tek tek hecelenmiş yazıları gönderir.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]);
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]); ...
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.
Re: Hecelerin veritabanına gönderilmesi
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.
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.
-
- Üye
- Mesajlar: 14
- Kayıt: 02 Tem 2009 11:29
Re: Hecelerin veritabanına gönderilmesi
ç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?
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?
Re: Hecelerin veritabanına gönderilmesi
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;
-
- Üye
- Mesajlar: 14
- Kayıt: 02 Tem 2009 11:29
Re: Hecelerin veritabanına gönderilmesi
bu kodu yazdım memo2'nin içerisi tamamen silindi.emin_as yazdı:Yukarıdaki kodu yazarsan sorun çözülür.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;

Re: Hecelerin veritabanına gönderilmesi
s1 e hecelenecek yaziyi aktardın mı?
-
- Üye
- Mesajlar: 14
- Kayıt: 02 Tem 2009 11:29
Re: Hecelerin veritabanına gönderilmesi
evet memo2.text:=s1 şeklinde yaptım...
Re: Hecelerin veritabanına gönderilmesi
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.
S1 e birşey aktarmazsan, sonuçta s1 de memo2.text e boş yazı aktarmış olur.
-
- Üye
- Mesajlar: 14
- Kayıt: 02 Tem 2009 11:29
Re: Hecelerin veritabanına gönderilmesi
:S iyice karıştı kafam şimdi memo1deki yazıyı memo2ye değilde s1 e mi aktarmalıyım?