Delphi Dünyası Facebook'ta

Kodbank İndir

! CODEBANK 2012 !

İNDİRMEK&DETAYLI BİLGİ ALMAK İÇİN BURAYI TIKLAYINIZ.

Gönderen Konu: Metni Parçalara Ayırmak ?  (Okunma sayısı 995 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı 3fekan

  • Delphi 1 Level 2
  • **
  • İleti: 19
  • Rep: +0/-0
Metni Parçalara Ayırmak ?
« : 04 Ağustos 2009 15:52:07 »
Merhaba, sabahdan beri yoğun şekilde araştırıyorum ama bulamadım :S

istediğim şey mesela php de pcre fonksiyonları vardır metni belli kriterlere göre parçalara ayırabiliriz yani bir metin içerisinden {deneme}.....{/deneme} ifadeleri arasındaki verileri ayrı ayrı çekebilriz, delphide bunu nasıl yaparız, rss okuma xml bölme vs araştırdım ama elle tutulur bir sonuç bulamadım yardım ederseniz sevinirim..

Çevrimdışı hayati

  • Administrator
  • *****
  • İleti: 860
  • Rep: +19/-3
  • Cinsiyet: Bay
Ynt: Metni Parçalara Ayırmak ?
« Yanıtla #1 : 04 Ağustos 2009 17:47:15 »
String Fonksiyonları bir incele istersen
Olsa dahi tenimin kıl biten her yeri bir dil, güçsüzüm şükretmeye,şükrüm binde bir bile değil (İ.R.)

Çevrimdışı aligel54

  • Delphi 2006 Level 4
  • ****
  • İleti: 481
  • Rep: +1/-0
Ynt: Metni Parçalara Ayırmak ?
« Yanıtla #2 : 04 Ağustos 2009 18:30:09 »
Delphide istediğin gibi bir komut yok sanırım.
Ama aşağıdaki şekilde yapabilirsin.

Kod:  (Unknown Language)
  1. var
  2.   Yazi:string;
  3.   SS:string;
  4.   Satirlar:TStringlist;
  5.   Sonuc:string;
  6. begin
  7.  
  8.   Yazi:='{deneme}Vesaire de vesaire {/deneme}{deneme}Bu da ikinci satır{/deneme} {deneme}Ha bu da üçüncü {/deneme}';
  9.  
  10.   // diyelimki 2 nci satırı almak istiyoruz yani  -- Bu da ikinci satır -- yazısını
  11.  
  12.   SS:=StringReplace(Yazi, '{/deneme}', #13, [rfReplaceAll]);
  13.   SS:=StringReplace(Yazi, '{deneme}', '', [rfReplaceAll]);
  14.   // üstteki iki satırda ne yaptım dersen; {/deneme} yi #13 , {deneme} yi ise boş karakter olarak değiştirdim.
  15.   // sonunda yazı şöyle oluştu :   'Vesaire de vesaire'+#13+'Bu da ikinci satır'+#13+'Ha bu da üçüncü'
  16.   //  Bu yazıyı da bir stringliste atarsak istediğimiz satırı alabiliriz...
  17.  
  18.  
  19.   Satirlar:=TStringList.Create;
  20.   Try
  21.     Satirlar:=SS;    
  22.  
  23.     Sonuc:=Satirlar[1]; // listenin 1 nolu adresindeki yani istediğimiz 2 nci satırı sonuca attık
  24.  
  25.     // 3 ncü satırı yani -- Ha bu da üçüncü -- yazısını istiyorsak...
  26.     Sonuc:=Satirlar[2];
  27.  
  28.   Finally
  29.     Satirlar.Free;
  30.   End;
  31.  
  32.  

Not: ezbere yazdım Syntax hatası olabilir...

Çevrimdışı barutali

  • Administrator
  • *****
  • İleti: 2.228
  • Rep: +54/-0
  • Cinsiyet: Bay
  • Falan filan ...
  • Delphi Sürümü: 2010 - XE2
Ynt: Metni Parçalara Ayırmak ?
« Yanıtla #3 : 04 Ağustos 2009 19:42:33 »
eğer rss okumak istiyorsan sitede açık kaynak yayınladığım bi proje var linki aşağıda ...

http://www.delphidunyasi.net/acik-kaynak/delphi-dunyasi-rss-okuyucu/



Amatör Küme Programcı

Çevrimdışı 3fekan

  • Delphi 1 Level 2
  • **
  • İleti: 19
  • Rep: +0/-0
Ynt: Metni Parçalara Ayırmak ?
« Yanıtla #4 : 06 Ağustos 2009 02:10:03 »
Yardımlarınız için teşekürler,
aligel54: tam olarak istediğim şey buydu yardımınız için ayıryetten teşekür ederim.
barutali: evet onu incelemiştim daha önce (:

Çevrimdışı Opt2000

  • Global Moderatör
  • *****
  • İleti: 263
  • Rep: +9/-1
  • Cinsiyet: Bay
Ynt: Metni Parçalara Ayırmak ?
« Yanıtla #5 : 09 Ağustos 2009 11:45:41 »
Selam,

aligel54'in ürettiği çözüm işi kotarıyor, ama ben olsam aynı yaklaşımı biraz daha farklı uygulardım.

Kod: [Seç]
var
  Yazi: string;
  Satirlar: TStringList;
begin
 Yazi:='{deneme}Vesaire de vesaire {/deneme}{deneme}Bu da ikinci satır{/deneme} {deneme}Ha bu da üçüncü {/deneme}'; 
 
 Yazi := StringReplace(Yazi, '{/deneme}', '|', [rfReplaceAll]);  //#13 ile değil, | ile değiştiriyorum
 Yazi := StringReplace(Yazi, '{deneme}', '', [rfReplaceAll]); 
 
 Satirlar := TStringList.Create;
 Satirlar.Delimiter := '|';
 Satirlar.StrictDelimiter := True;
 Satirlar.DelimitedText := Yazi;

 //Satirlar ile işlem yap

 Satirlar.Free;
end;

Arada çok ciddi fark yok gibi görünebilir, ama aslında var. RSS reader benzeri bir uygulamada {deneme}asdfad{/deneme} arasında Enter karakteri olabilir. | da olabilir elbette, belki o yüzden basılayan bir karakter seçmek daha doğru olur (#1, #2 gibi)

Delimiter, StrictDelimiter ve DelimitedText özellikleri de istediğim karaktere göre liste oluşturulmasını sağlıyor. StrictDelimiter kullanılmazsa aradaki enter'lar yeni bir line olarak algılanır. Böylece gerçekten de kaç tane blok varsa o kadar line elde ediyorum.

Kolay gelsin,
Bahadır Alkaç

Çevrimdışı muallaktaki

  • Delphi 1 Level 2
  • **
  • İleti: 11
  • Rep: +0/-0
Ynt: Metni Parçalara Ayırmak ?
« Yanıtla #6 : 06 Şubat 2012 15:33:10 »
Delphide istediğin gibi bir komut yok sanırım.
Ama aşağıdaki şekilde yapabilirsin.

Kod:  (Unknown Language)
  1. var
  2.   Yazi:string;
  3.   SS:string;
  4.   Satirlar:TStringlist;
  5.   Sonuc:string;
  6. begin
  7.  
  8.   Yazi:='{deneme}Vesaire de vesaire {/deneme}{deneme}Bu da ikinci satır{/deneme} {deneme}Ha bu da üçüncü {/deneme}';
  9.  
  10.   // diyelimki 2 nci satırı almak istiyoruz yani  -- Bu da ikinci satır -- yazısını
  11.  
  12.   SS:=StringReplace(Yazi, '{/deneme}', #13, [rfReplaceAll]);
  13.   SS:=StringReplace(Yazi, '{deneme}', '', [rfReplaceAll]);
  14.   // üstteki iki satırda ne yaptım dersen; {/deneme} yi #13 , {deneme} yi ise boş karakter olarak değiştirdim.
  15.   // sonunda yazı şöyle oluştu :   'Vesaire de vesaire'+#13+'Bu da ikinci satır'+#13+'Ha bu da üçüncü'
  16.   //  Bu yazıyı da bir stringliste atarsak istediğimiz satırı alabiliriz...
  17.  
  18.  
  19.   Satirlar:=TStringList.Create;
  20.   Try
  21.     Satirlar:=SS;    
  22.  
  23.     Sonuc:=Satirlar[1]; // listenin 1 nolu adresindeki yani istediğimiz 2 nci satırı sonuca attık
  24.  
  25.     // 3 ncü satırı yani -- Ha bu da üçüncü -- yazısını istiyorsak...
  26.     Sonuc:=Satirlar[2];
  27.  
  28.   Finally
  29.     Satirlar.Free;
  30.   End;
  31.  
  32.  

Not: ezbere yazdım Syntax hatası olabilir...

Çook teşekkür ederim aligel54. Büyük bir sıkıntıdan kurtardınız beni. Güzel güzelde açıklamışsınız. Sağolun ;)