Max kaçıncı satırda

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Max kaçıncı satırda

Mesaj gönderen Lord_Ares »

Merhaba yapmaya çalıştığım şey, aşağıdaki satırlarda <DIV class="column max"> kaçıncı sırada olduğunu bulmak.

Kod: Tümünü seç

<DIV class="column "><B>3.75</B><BR><SPAN>%1.55</SPAN></DIV>
<DIV class="column "><B>3.20</B><BR><SPAN>%2.49</SPAN></DIV>
<DIV class="column max"><B>1.60</B><BR><SPAN>%51.19</SPAN></DIV>
<DIV class="column "><B>1.40</B><BR><SPAN>%1.32</SPAN></DIV>
<DIV class="column "><B>2.05</B><BR><SPAN>%7.59</SPAN></DIV>
<DIV class="column "><B>1.70</B><BR><SPAN>%3.42</SPAN></DIV>
<DIV class="column "><B>1.65</B><BR><SPAN>%0.35</SPAN></DIV>
Kodum şu şekilde kullandığımda sonuç boş dönüyor.

Kod: Tümünü seç

  
    var
     x:integer;
     gecici,aranan:string;
     begin
          x:=0;
          gecici:='';
          aranan:='<DIV class="column max">';
         while pos('<DIV class="column max">',gelen)>0 do begin
               gecici:=Copy(gelen, 1, Pos('<B>', gelen)-1);
               inc(x);
               Delete(gelen, 1, pos('</DIV>', gelen )+5);
           [color=#FF0000]  if gecici=aranan then  Form1.Memo2.Lines.Add(gecici+'---'+IntToStr(x));[/color]
               gecici:='';
         end;
     end;

Kodu pos fonksiyonu ile yaparsam

Kod: Tümünü seç

   var
     x:integer;
     gecici,aranan:string;
     begin
          x:=0;
          gecici:='';
          aranan:='<DIV class="column max">';
         while pos('<DIV class="column',gelen)>0 do begin

             gecici:=Copy(gelen, 1, Pos('<B>', gelen)-1);
             inc(x);
           [color=#FF0000]  if pos(aranan,gelen)>0 then  Form1.Memo2.Lines.Add(gecici+'---'+IntToStr(x));[/color]
             Delete(gelen, 1, pos('</DIV>', gelen )+5);
              gecici:='';
         end;
     end;

Bu seferde sonuç böyle çıkıyor İf ifadesi kullandığım için aslında sadece colum max olan satırı eklemeli memoya ama maxa kadar olan tüm satırları ekliyor bir türlü sebebini bulamadım :)))

<DIV class="column ">---1

<DIV class="column ">---2

<DIV class="column max">---3
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2381
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Max kaçıncı satırda

Mesaj gönderen freeman35 »

"gelen" değişkeninin tipi ne? tstringlist içine at
for I=0 to tstringlist.count-1 do
if pos('n max', tstringlist.items.string)>0 then break;
if I<tstringlist.count then aradığın satır numarası = I
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Max kaçıncı satırda

Mesaj gönderen Lord_Ares »

fikir için teşekkürler, sorun stringi karşılaştırmaması. Column ile column max aynı görmesi. oysa if kullanıp eğer eşitse memoya ekle diyorum ama o iplemiyor :D
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Max kaçıncı satırda

Mesaj gönderen mrmarman »

Aşağıdaki şekilde bir denersen işini görecektir. Bir deneme yaptım çalışıyor.
Resim

Kod: Tümünü seç

function MaxNedir( strGelen : String ): string;
var
  x         : integer;
  strGecici,
  strAranan : String;
begin
  Result    := '';
  x         := 0;
  strAranan := '<DIV class="column ';
  while pos(strAranan, strGelen) > 0 do
  begin
    inc(x); // her bulunan için (x) değeri (1) arttırılır...
    // bulduğumuzu hemen silelim ki onu tüketelim, tekrar bulunmasın.
    System.Delete( strGelen, 1, Pos(strAranan, strGelen) + Length(strAranan)-1 );
    strGelen := Trim(strGelen); // Memo vb. geliyorsa boşluk, Return karakteri vb. temizledik.
    // şimdi yanında MAX ifadesi var mı ? onu test edelim. 
    if pos('max', strGelen) = 1 then
    begin // max bulundu. değeri okuyup satır nosuyla raporlayalım...
      system.Delete( strGelen, 1, Pos('<B>', strGelen) + length('<B>')-1);
      strGecici := Copy( strGelen, 1, Pos('<', strGelen)-1);
      if Result = '' then Result :=                'Satır = ' + IntToStr(x) + ' - MAX Değer = ' + strGecici
                     else Result := Result + #13 + 'Satır = ' + IntToStr(x) + ' - MAX Değer = ' + strGecici;
    end else // max yokmuş...
    begin // dilersen bu begin bloğunu silersen MAX olmayan değerleri okumaz...
      system.Delete( strGelen, 1, Pos('<B>', strGelen) + length('<B>')-1);
      strGecici := Copy( strGelen, 1, Pos('<', strGelen)-1);
      if Result = '' then Result :=                'Satır = ' + IntToStr(x) + ' - Değer = ' + strGecici
                     else Result := Result + #13 + 'Satır = ' + IntToStr(x) + ' - Değer = ' + strGecici;
    end;
  end;
end;

Kod: Tümünü seç

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  ShowMessage( MaxNedir( Memo1.Text ) );
end;
Resim
Resim ....Resim
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Max kaçıncı satırda

Mesaj gönderen Lord_Ares »

çoK teşekkürler hocam ellerine sağlık bu kod sorunumu çözdü. Aşağıdaki karşılaştırmanın çalışmaması beni şaşırttı.Oysa iki string değişkeni de kontrol ettiğimde içerikleri aynıydı :)))))

Kod: Tümünü seç

               gecici:=Copy(gelen, 1, Pos('<B>', gelen)-1);
               inc(x);
               Delete(gelen, 1, pos('</DIV>', gelen )+5);
              if gecici=aranan then  Form1.Memo2.Lines.Add(gecici+'---'+IntToStr(x));
    
Cevapla