Html Parse işleminde Uygulama donuyor

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
hakanharbeli
Üye
Mesajlar: 76
Kayıt: 01 Nis 2016 03:58

Html Parse işleminde Uygulama donuyor

Mesaj gönderen hakanharbeli »

Kod: Tümünü seç

function htmld(S: string): string;
var
  TagBegin, TagEnd, TagLength: integer;
begin
  TagBegin := Pos( '<', S);

  while (TagBegin > 0) do begin
    TagEnd := Pos('>', S);
    TagLength := TagEnd - TagBegin + 1;
    Delete(S, TagBegin, TagLength);
    TagBegin:= Pos( '<', S);
  end;

  Result := S;
end;
merhaba bu fonksiyonla html tag'leri memo'dan siliyorum fakat memo'daki satır sayısı çok fazla olunca uygulama donuyor bunun için ne yapabilirim? ne yaptıysam bir türlü çözemedim
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Html Parse işleminde Uygulama donuyor

Mesaj gönderen Lord_Ares »

Application.progresmessage satırını ekle. Tam ne yapmak istediğinizi bilmiyorum ama Html parse ile ilgili daha basit yöntemler paylaşıldı dilersen onlara göz atabilir, tag temizlemekten kurtulabilirsin.
hakanharbeli
Üye
Mesajlar: 76
Kayıt: 01 Nis 2016 03:58

Re: Html Parse işleminde Uygulama donuyor

Mesaj gönderen hakanharbeli »

hocam onu denedim fakat yanıt vermiyor sorununu aşamadım sanırım thread oluşturmalıyım yukardaki fonksiyon şu şekilde çalışıyor.

Kod: Tümünü seç

var
s:string;
begin
memo1.text:=htmld(s);
end;
bu buton click olayında program yanıt vermiyor memodaki kelime sayısı az olunca sorun olmuyor. buraya nasıl thread oluşturabilirm?
ertank
Kıdemli Üye
Mesajlar: 1716
Kayıt: 12 Eyl 2015 12:45

Re: Html Parse işleminde Uygulama donuyor

Mesaj gönderen ertank »

Merhaba,

Bahsettiğiniz uygulamayı donduran HTML bilgisini bir dosya olarak paylaşmanız mümkün müdür?
hakanharbeli
Üye
Mesajlar: 76
Kayıt: 01 Nis 2016 03:58

Re: Html Parse işleminde Uygulama donuyor

Mesaj gönderen hakanharbeli »

Çözdüm arkadaşlar bu daha sağlıklı bir fonksiyon

Kod: Tümünü seç

function StripHtmlMarkup(const source:string):string;
var i, count: Integer;
    InTag: Boolean;
    P: PChar;
begin
  SetLength(Result, Length(source));
  P := PChar(Result);
  InTag := False;
  count := 0;
  for i:=1 to Length(source) do
    if InTag then
      begin
        if source[i] = '>' then InTag := False;
      end
    else
      if source[i] = '<' then InTag := True
      else
        begin
          P[count] := source[i];
          Inc(count);
        end;
  SetLength(Result, count);
end;
Cevapla