String Parçalama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
PTT
Üye
Mesajlar: 30
Kayıt: 26 Ağu 2011 02:37

String Parçalama

Mesaj gönderen PTT »

Merhaba,
Şöyle Bir Stringimiz olsun.
s:=('11 KAP 22 KG 33 ADET 44 VARİL 55 BİDON ');

Her Bir Brimini Kendi Labeline ayırmak istiyorum fakat tam yapamadım.

LblKap.Caption:='11';
LblKg.Caption:='22';
LblAdet.Caption:='33';
LblVaril.Caption:='44';
LblBidon.Caption:='55';

Kod: Tümünü seç

var
s:string;
yer,i:Integer;
begin
      s:=(''11 KAP 22 KG 33 ADET 44 VARİL 55 BİDON');
      aranan:='KAP';
      for i:=1 to 4 do
      begin
      yer:=pos(aranan,s);
          if yer>0 then begin  
              yer:=yer+length(aranan);
              s:=copy(s,yer,length(s)-yer);
              s:=trim(s);
              Mmo1.Lines.Add(aranan +' ' + s);
               aranan:='KG'; 
                ...
                ...
                ...
          end;
      end;
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: String Parçalama

Mesaj gönderen SimaWB »

StringList kullanarak çok kolay bir şekilde string'inizi parçalayabilirsiniz:

Kod: Tümünü seç

sl := TStringList.Create;
try
  sl.LineBreak := ' ';//her boşlukta yeni satıra geçsin
  sl.Text := s;//sizin stringiniz
  //buradan sonra sl[Index] ile istediğiniz kısma ulaşabilirsiniz
  //sl[0] = 11
  //sl[1] = KAP
  //...
finally
  st.Free;
end;
There's no place like 127.0.0.1
Kullanıcı avatarı
baypipox
Üye
Mesajlar: 122
Kayıt: 16 Eki 2006 04:23
İletişim:

Re: String Parçalama

Mesaj gönderen baypipox »

arkadaşım aşağıdaki linke bir göz at istesen, ordaki procedure mutlaka işine yarayacaktır.. Gelen Frame başına ve sonuna ilk önce boşluk ekle, sonra istediğin aralıkları belirle, işlem tmm olacaktır..

viewtopic.php?f=19&t=27479

Kod: Tümünü seç

S:='11 KAP 22 KG 33 ADET 44 VARİL 55 BİDON';
S:=' '+S+' '; 
Lkap.caption:=karakterarsi(S,' ',' ',1,2);
Lkg.caption:=karakterarsi(S,' ',' ',3,4);
Ladet.caption:=karakterarsi(S,' ',' ',5,6);
Lvaril.caption:=karakterarsi(S,' ',' ',7,8);
Lbidon.caption:=karakterarsi(S,' ',' ',9,10);
dpcmsx
Üye
Mesajlar: 22
Kayıt: 06 Eyl 2011 04:25

Re: String Parçalama

Mesaj gönderen dpcmsx »

Kod: Tümünü seç


s := '11 KAP 22 KG 33 ADET 44 VARİL  55 BİDON';
i := 0;

Repeat
  if (s[i+1] in ['0'..'9']) then Memo1.Lines.Add(Copy(s,i,2));
    i := i + 2 ;
  Until i > length(s);
s string içinde 5. item tek sayılı haneye denk geldiği için 1 aralık fazla bıraktım.
PTT
Üye
Mesajlar: 30
Kayıt: 26 Ağu 2011 02:37

Re: String Parçalama

Mesaj gönderen PTT »

Sn. dpcmsx;
Stringdeki değerlerin hepsi 2 karakter olmadıgını belirtmeliyim. Yani şu şekilde de olabiliyor string. O zaman tam uyduramıyorum sizin methodu

s := '12 KAP 123 KG 1234 ADET 1234567 VARİL 123 BİDON';

yada

s := '1 KAP 123 KG 12 ADET 123456790 VARİL 123456 BİDON';

gibi..
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: String Parçalama

Mesaj gönderen unicorn64 »

:ara fetch
(uses idGlobal)
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
PTT
Üye
Mesajlar: 30
Kayıt: 26 Ağu 2011 02:37

Re: String Parçalama

Mesaj gönderen PTT »

İyi Akşamlar arkadaşlar
Belki daha pratik yolları vardır ama ben biraz basit yoldan şu şekilde çözümümü buldum.

Kod: Tümünü seç

procedure TForm1.btnTestClick(Sender: TObject);
var
  metin,aranan, oncesi, sonrasi:AnsiString;
  i, Kacincideger1, Kacincideger2,Kacincideger3,Kacincideger4, Kacincideger5:Integer;
begin
      metin:='199 KAP 22 KG 33 ADET 44 VARİL 55 BİDON';
      aranan:='KAP';

              Kacincideger1:=AnsiPos(aranan,metin);       //Aranan kaçıncı karakter
              //ShowMessage(IntToStr(Kacincideger1));
              oncesi:=AnsiLeftStr(metin,Kacincideger1-1); //Aranandan öncesi
              sonrasi:=AnsiMidStr(metin,Kacincideger1+1+Length(aranan),Length(metin)+Kacincideger1);   //  x karakterden sonraki x karakteri al

              //Aranandan sonrasını al
              Mmo1.Lines.Add(aranan +' = ' + oncesi);
          
             aranan:='KG';
              Kacincideger2:=AnsiPos(aranan,sonrasi);       //Aranan kaçıncı karakter   (Kalan sonrasından işlem yapılıyor)
              oncesi:=AnsiLeftStr(sonrasi,Kacincideger2-1); //Aranandan öncesi
              sonrasi:=AnsiMidStr(sonrasi,Kacincideger2+1+Length(aranan),Length(sonrasi)+Kacincideger2);    //  x karakterden sonraki x karakter
              Mmo1.Lines.Add(aranan +' = ' + oncesi);

              aranan:='ADET';
              Kacincideger3:=AnsiPos(aranan,sonrasi);       //Aranan kaçıncı karakter   (Kalan sonrasından işlem yapılıyor)
              oncesi:=AnsiLeftStr(sonrasi,Kacincideger3-1); //Aranandan öncesi
              sonrasi:=AnsiMidStr(sonrasi,Kacincideger3+1+Length(aranan),Length(sonrasi)+Kacincideger3);    //  x karakterden sonraki x karakter
              Mmo1.Lines.Add(aranan +' = ' + oncesi);

              aranan:='VARİL';
              Kacincideger4:=AnsiPos(aranan,sonrasi);       //Aranan kaçıncı karakter   (Kalan sonrasından işlem yapılıyor)
              oncesi:=AnsiLeftStr(sonrasi,Kacincideger4-1); //Aranandan öncesi
              sonrasi:=AnsiMidStr(sonrasi,Kacincideger4+1+Length(aranan),Length(sonrasi)+Kacincideger4);    //  x karakterden sonraki x karakter
              Mmo1.Lines.Add(aranan +' = ' + oncesi);


              aranan:='BİDON';
              Kacincideger5:=AnsiPos(aranan,sonrasi);       //Boşluk kaçıncı karakter   (Kalan sonrasından işlem yapılıyor)
              oncesi:=AnsiLeftStr(sonrasi,Kacincideger5-1); //Aranandan öncesi
              sonrasi:=AnsiMidStr(sonrasi,Kacincideger5+1+Length(aranan),Length(sonrasi)+Kacincideger5);    // x. karakterden sonraki x karakter
              Mmo1.Lines.Add(aranan +' = ' + oncesi);

end;
orhancc
Üye
Mesajlar: 585
Kayıt: 24 Ağu 2010 02:14
Konum: İstanbul / Kadıköy
İletişim:

Re: String Parçalama

Mesaj gönderen orhancc »

Bunu biraz kurcala işine yarar ;)

Kod: Tümünü seç

uses HTTPUtil;

procedure TForm22.Button1Click(Sender: TObject);
var
  LTokenizer: IStringTokenizer;
begin
  Memo1.Clear;
  LTokenizer := StringTokenizer(Edit1.Text, ‘ ‘);
  while LTokenizer.hasMoreTokens do
    Memo1.Lines.Add(LTokenizer.nextToken);
  end;
PTT
Üye
Mesajlar: 30
Kayıt: 26 Ağu 2011 02:37

Re: String Parçalama

Mesaj gönderen PTT »

Teşekkür ederim forumda sizin bu methodunuzu görmüştüm :shock:
Üzerinde farklı şeyler denemiştim. Benim bulduğum yoldan daha pratik olduğu kesin
Cevapla