text veya memodan bu değerleri nasıl ayırıp çekebilirim.

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
DelphiNV
Üye
Mesajlar: 54
Kayıt: 28 Oca 2005 03:15
Konum: Bursa

text veya memodan bu değerleri nasıl ayırıp çekebilirim.

Mesaj gönderen DelphiNV »

Merhaba Arkadaşlar..

Kod: Tümünü seç


[0]
I10000 
[0]
A20000
[0]
B3000

[1]
I10000 
[1]
A20000
[1]
B3000

[0]
I10000 
[0]
A20000
[0]
B3000

[0]
I10007 
[0]
A20007
[0]
B3007

[1]
I10008 
[1]
A20008
[1]
B3008

[0]
I1000p 
[0]
A2000p
[0]
B300p

[1]
I10002 
[1]
A20002
[1]
B3002

Yukarıdaki yapıda bir veri yapım var (text file) Burada Yapmak istediğim bu dosyayı yukarıdan aşağıya doğru tarayarak, [0] ve [1] lerin bir satır altındaki Değerleri almak.

Fakat Bu değerler enson [0] ve [1] in altındaki değerler olacak çünki aralarda bu değerler değişebiliyor.O yüzden en son değerleri çekmem lazım...

Mesela: en başta [0] bir satır altındaki değer I10000 iken en son değer I1000p olmuş...

Arkadaşlar Nasıl bir methot kullanmalıyım. Bu işi nasıl Çözebilirim..


Saygılar Sevgiler...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Merhaba..

- Öncelikle bu değerleri tek satıra dönüştürerek işleme başlarsan kendine kolaylık sağlamış olursun.

Örneğin :

Kod: Tümünü seç

[0] I10000 
[0] A20000 
[0] B3000 

[1] I10000 
[1] A20000 
[1] B3000 
gibisinden.

- Ondan sonra da 0 bloğu için ve 1 bloğu için ayrı ayrı stringlist oluşturursun.

- Gördüğüm üzere tutarlı üçerli gruplar şeklinde bir yapı var. (bir CNC tezgah veya bezeri cihazdan okunan değer herhalde ki) Buna dayanarak her boşluktan sonraki her üçerli grubu idx0 idx1 idx2 şeklinde [0] ise birine [1] ise diğeri olmak kaydıyla bu stringlistlere dağıtırsın, ancak tüm listeyi değil. Büyüklük küçüklük kontrolü yapacak şekilde blok blok yapacaksın.

- Örneği liste boş ilk [0] grubunu StringList1'e aktardın. Daha sonra yeniden [0] olan gruba geldiğinde ilk değeri StringList[0] değeri ile, ikinci değeri StringList[1] değeri ile, üçüncü değer StringList[2] değeri ile karşılaştırıp büyük olanı StringList'in ilgili indexli elemanına atarsın. Böylece döngü sonunda elde ettiğin StringList1 içinde üç satırlık en büyük [0] bloğu değerleri oluyorken, StringList2'de de üç satırlık en büyük [1] bloğu değerlerini elde edersin.

- İlk anda görür görmez aklıma gelen metod bu. Bu metod basit ama daha basiti mutlaka vardır.
Resim
Resim ....Resim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Bahsettiğim şekilde hemen bir kurgu hzırladım. İki farklı stringgrid yerine bir tane oluşuturup bunun ilk üç ve son üç elemanı şeklinde kullanarak tasarruf yaptık. :wink:

Kod: Tümünü seç

Procedure SonDegerleriCek( Liste, Urun :TStrings);
Var
  i, j, idx : Integer;
  L1        : TStringList;
  D1, D2    : String;
begin
  If Liste.Count = 0 then Exit;
  L1 := TStringList.Create;
  Urun.Clear;

  // İlk olarak iki satırlı ifade tek satıra dönüştürülür
  // ve boşluklar atılır.
  For i := 0 to Liste.Count-1 do begin
    If Trim(Liste[i]) <> '' then begin
        If Trim(Liste[i])[1] = '[' then L1.Add(Trim(Liste[i]) + ' ')
                                   else L1[L1.Count-1] := L1[L1.Count-1] + Trim(Liste[i]);
    end;
  end;

  If L1.Count >= 0 then begin
    // ikinci olarak Urun tablosuna 6 adet boş değer atanır...
    For j := 0 to 5 do Urun.Add( '' );

    // artık işleme başlamaya hazırız...
    i := 0;
    While i < L1.Count-1 do begin
      If Copy(L1[i], 1, 3) = '[0]' then idx := 0 // [0] ise ilk 3,
                                   else idx := 3;// [1] ise ikinci 3 değerlendirir.
      For j := 0 to 2 // takip eden her 3 değer kontrol edilerek
                      // en büyük olanı Urune alınacak.
        do begin
          D1 := Urun[j+idx];
          D2 := L1[i+j];
          If D1 <> D2 then Urun[j+idx] := D2;
        end;
      inc(i, 3); // üç ileri atlıyoruz. Çünkü üç'lü kontrol yaptık.
    end;
  end;
  L1.Free;
end;
// Kullanımı için bu değerleri bir TMemo'ya koy, sonra butona basıncaki diğer TMemo'daki sonuçları irdele

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
  SonDegerleriCek( Memo1.Lines, Memo2.Lines );
end;
- Afiyet olsun. 8)
Resim
Resim ....Resim
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Mesaj gönderen Battosai »

Ben soruyu en alttaki [0] ve [1] gruplarını istiyor diye düşündüm bu yapıya göre aşağıdaki kodu yazdım.Gerçi soruda pek açık değilya neyse

//Ayrıca listede en az 2 tane blok olmassa kod hata verecektir...çünkü alttan 6 değer almak için yazdım kesin çözüm değil fikir vermek için bir kod...

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
index,list:TStringList;
i:integer;
begin
list:=TStringList.Create;
index:=TStringList.Create;
list.AddStrings(Memo1.Lines);
try
for i:=0 to list.Count-1 do
begin
 if (list.Strings[i]='[0]') or (list.Strings[i]='[1]') then
     index.Add(inttostr(i+1));
end;
i:=index.Count-6;
Memo1.Clear;
repeat
Memo1.Lines.Add(list.Strings[strtoint(index.Strings[i])]);
inc(i);
until i=index.Count;
finally
list.Free;
index.Free;
end;
end;

Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

@Battosai

- Seninki aslında daha makul bir yaklaşım. :idea:

- Sonuçta bahsettiğin gibi son değerleri isteniyor diye anladım ben de.

- Verdiğim kod aslında değişim tablosuna yönelik idi. Yani ne zaman ne şekilde değiştinin listesine göre hazırlayıp sadece son değerleri gösterir hale dönüştürdüm. Çünkü başta yanlış anlamışım.. :wink:
Resim
Resim ....Resim
DelphiNV
Üye
Mesajlar: 54
Kayıt: 28 Oca 2005 03:15
Konum: Bursa

Mesaj gönderen DelphiNV »

sevgili arkadaşlar Hepinize çok teşekkür ederim...

mrmarman
arkadaşım senin yazdığın kod tam istediğim gibi.
Fakat biraz daha yardımcı olurmusunuz daha önce verdiğim veri örneğinde çalışıyor. Peki bu verilerin aralarında düzensiz satırlar varsa nasıl yaparız...

aşağıda örnekte olduğu gibi...

Ayrıca Datayı olduğu gibi alsak satır birleştirmedenn
[0]
I10000
gibi

çok şey istedim galiba

Kod: Tümünü seç

32432432432432423dsfsfsdafsadfsadfasdfasdf
[0] 
I10000 
dasdasdasdasdasdasdasdasdasdasdasdasdas
[0] 
A20000 
sadsadasdasdasdasdasdasdasdasdasdasdas
[0] 
B3000 
dasdasdasdasdasdasdasdasdasdasdasdasdsad
[1] 
I10000 
işişişişişişişişişişişişişişişişiş
[1] 
A20000 
[1] 
B3000 

[0] 
I10000 
[0] 
A20000 
[0] 
B3000 
ğpğpğpğpğpğpğpğpğpğpğpğpğpğpğpğpğpğpğp
[0] 
I10007 
[0] 
A20007 
üğüğüğüğüğüğüğüğüğüğüğüğüğüğüğüğüğüğüğüğüğ
[0] 
B3007 

[1] 
I10008 
[1] 
A20008 
dasdasdasdasdasdasdasdasdasdasdasdasdas
[1] 
B3008 

[0] 
I1000p 
[0] 
A2000p 
dasdasdasdasdasdasdasdasdasdasdasdasdas
[0] 
B300p 

[1] 
I10002 
dasdasdasdasdasdasdasdasdasdasdasdasdas
[1] 
A20002 
dasdasdasdasdasdasdasdasdasdasdasdasdas
[1] 
B3002 


Saygılar....
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

bundan sonrası siparişe girer sana kavrayasın diye detaylı açıklamalı gerekçeli kod yazdım. bunu değerlendir.
Resim
Resim ....Resim
DelphiNV
Üye
Mesajlar: 54
Kayıt: 28 Oca 2005 03:15
Konum: Bursa

Mesaj gönderen DelphiNV »

Teşekkür ederim saygılar....
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

Siparişi geçtim usta özel yapım elbise isteği gibi.
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Cevapla