Metni Parçalama (Soru)(Önemli)

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
godbaba
Üye
Mesajlar: 10
Kayıt: 19 May 2009 02:37

Metni Parçalama (Soru)(Önemli)

Mesaj gönderen godbaba »

Arkadaşlar Merhaba kendi yazdığım bir fonksiyon var ve bunun gelişmişine ihtiyacım var...

Fonksiyon :

Kod: Tümünü seç

function kes(sembol:string;metin:String;yer:Boolean):string;
var
uzunluk,pos_sembol:Integer;
ilk,son:String;
begin
uzunluk:=Length(metin);
pos_sembol:=Pos(sembol,metin);
ilk:=Trim(Copy(metin,pos_sembol+1,uzunluk));
son:=Trim(Copy(metin,1,pos_sembol-1));
if yer=False then
kes:=ilk
else
kes:=son;
end;
kes('-','1-2-3-4',True);

bu şekilde kullanımı var
true yazınca ilk bölümü alıyor false yazınca 2. bölümü

kes('-','1-2-3-4',True);

bu işlemi yapınca 1-2 yi alıyorum fakat benim bunu tekrar parçalamam gerekiyor :(
peki belirtilen simgelerden metni ayıran çok uğraştırmayacak bir fonksiyon varmı varsa verebilirmisiniz ?

php kullananlar bilir explode komutu gibi birşey...

ŞİMDİDEN TEŞEKKÜRLER !
En son godbaba tarafından 29 Eki 2010 08:59 tarihinde düzenlendi, toplamda 3 kere düzenlendi.
Kullanıcı avatarı
CiTiZEN
Üye
Mesajlar: 1163
Kayıt: 06 Oca 2008 04:15

Re: Metni Parçalama (Soru)(Önemli)

Mesaj gönderen CiTiZEN »

uses a IDGlobal ekleyip Fetch komutunu bir inceleyin..

Kolay Gelsin
UWESIS CORPORATION
godbaba
Üye
Mesajlar: 10
Kayıt: 19 May 2009 02:37

Re: Metni Parçalama (Soru)(Önemli)

Mesaj gönderen godbaba »

Kullanım olarak alttakini buldum

Kod: Tümünü seç

uses  idGlobal;

var
s1,s2:string;

s1:='659/325';

s2:=Fetch(s1,'/');
//fetch işleminden sonra
//s2->659  s1->325 olur...
fakat benim procedure ile aynı işlemi yapıyor ben mesela 212,5555,666,999
sayılarını parçalamak istiyorum 2 den fazla istiyorum :(

Lütfen yardım :(
Kullanıcı avatarı
CiTiZEN
Üye
Mesajlar: 1163
Kayıt: 06 Oca 2008 04:15

Re: Metni Parçalama (Soru)(Önemli)

Mesaj gönderen CiTiZEN »

form a bir edit bide button koyup edite 111,222,333,444,555 gibi ayraçları ben , olarak ayarladım siz ne ayarlarsanız artık, butonun onclick olayına:

Kod: Tümünü seç

var s,s1:string;
begin
   s:=Edit1.Text;
   Fetch(s,',');
   Edit1.Text:=s;
end;
UWESIS CORPORATION
godbaba
Üye
Mesajlar: 10
Kayıt: 19 May 2009 02:37

Re: Metni Parçalama (Soru)(Önemli)

Mesaj gönderen godbaba »

Kod: Tümünü seç

var s:string;
begin
   s:=Edit1.Text;
   Fetch(s,',');
   Edit1.Text:=s;
end;
Yanlış anladınız galiba bakın ben örneğin

1111,2222,3333,4444,5555

bu rakamları bir komutla s ye atamak istiyorum yani
s[1] yazdığımda örneğin virgülleri ayırıp bana 1111 i versin istiyorum :)
Kullanıcı avatarı
CiTiZEN
Üye
Mesajlar: 1163
Kayıt: 06 Oca 2008 04:15

Re: Metni Parçalama (Soru)(Önemli)

Mesaj gönderen CiTiZEN »

wala dediğinizden bunu anladım birde bunu deneyin forma 2 edit, 2 button ekleyin

Kod: Tümünü seç

var
  Form1: TForm1;
  i:integer; //array kontrolü
  s1:Array[0..5] of string; //11,22,33,44,55  5 tane farklı değer saklanacağı için 0..5
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var s:string;
begin
s:= Edit1.Text; //edit 1 deki 11,22,33 vs al
s1[i]:=Fetch(s,','); //edit 1 den alınanları , den önce olarak parçala, array a 0 dan başlayıp butona her basıldığında ata
Edit1.Text:=s; //, den sonrası edit e yazdırılıyor
i:=i+1; //array kontrolü butona her basıldığında,  1 , den önce değer atandığından dolayı 1 arttırılıyor
end;

procedure TForm1.Button2Click(Sender: TObject);
var i1:integer;
begin
i1:=StrToInt(Edit2.Text); //edit 2 de belitrilen array no ya göre içerik verir 0 ise 1111, 1 ise 2222 vs
ShowMessage(s1[i1]);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
i:=0; //form oluşturulduğunda array no 0 dan atama yapılmaya başlanacağından index 0 lanır
end;

kolay gelsin..
UWESIS CORPORATION
godbaba
Üye
Mesajlar: 10
Kayıt: 19 May 2009 02:37

Re: Metni Parçalama (Soru)(Önemli)(ÇÖZÜLDÜ)

Mesaj gönderen godbaba »

Hocam istediğim buydu ilgilendiğiniz için teşekkürler :) Allah razı olsun :)
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: Metni Parçalama (Soru)(Önemli)(ÇÖZÜLDÜ)

Mesaj gönderen emin_as »

Aşagıdaki koddaki gibi stringlist in delimiter özelliğini kullanabilirsiniz.

Kod: Tümünü seç

var
  slst : Tstringlist;
begin
  slst:=TStringlist.Create;
  slst.Delimiter:='-';
  slst.StrictDelimiter:=True;
  slst.DelimitedText:=s; // s:='111-222-333-444'   gibiyse
 //  s[0]  :='111' ;   s[1]:='222';  s[2]:='333'; s[3]:='444' olur.
 slst.Free;  // işi bitince stringlist i free etmek gerekir.
godbaba
Üye
Mesajlar: 10
Kayıt: 19 May 2009 02:37

Re: Metni Parçalama (Soru)(Önemli)(ÇÖZÜLDÜ)

Mesaj gönderen godbaba »

Kod: Tümünü seç

  slst.StrictDelimiter:=True;
satırında hata var :( uses mi eklemek gerekiyor gerekiyorsa hangi uses :(
orhancc
Üye
Mesajlar: 585
Kayıt: 24 Ağu 2010 02:14
Konum: İstanbul / Kadıköy
İletişim:

Re: Metni Parçalama (Soru)(Önemli)

Mesaj gönderen orhancc »

işini görür sanırım

Kod: Tümünü seç

uses HTTPUtil;

procedure TForm22.Button1Click(Sender: TObject);
var
  LTokenizer: IStringTokenizer;
begin
  Memo1.Clear;
  LTokenizer := StringTokenizer(Edit1.Text, ‘ ‘);// parçalanacak değer ve ayraç
  while LTokenizer.hasMoreTokens do
    Memo1.Lines.Add(LTokenizer.nextToken);
  end;
Cevapla