Fórum Localizar Links #374251

29/08/2009

0

Utilizo essas funcoes para filtrar links em um memo :
//Para capturar apenas o que estiver como valor em href=
function TrataLink(ALink: String): String;
var
 P : Integer;
 Limite : Char;
 S : String;
begin
  P := Pos(´href=´, ALink);
  if P > 0 then
  begin
     Inc(P, 5);
     if ALink[P] in [39, 34] then
     begin
       Limite := ALink[P];
       Inc(P);
     end
     else
       Limite := ´>´;
     for P := P to Length(ALink) do
     if ALink[P] <> Limite then
       S := S + ALink[P]
     else
       Break;
     Result := S;
  end;
end;

//Captura tags 
procedure CapturaLinks(AHTML: String; ALista: TStrings);
var
 P,X : Integer;
 S, Link : String;
begin
  S := AHTML;
  S := StringReplace(S,13,´´,[rfReplaceAll]);
  S := StringReplace(S,#10,´´,[rfReplaceAll]);
  S := AnsiLowerCase(S);
  repeat
    P := Pos(´<a´, S);
    if P > 0 then
    begin
      S := Copy(S, P+3, Length(S));
      for X := 1 to Length(S) do
      if S[X] <> ´>´ then
        Link := Link + S[X]
      else
      begin
        Link := TrataLink(Link);
        ALista.Add(Link);
        Break;
      end;
    end;
   Link := ´´;
  until P = 0;
end;



Utilizo ela dessa maneira :
CapturaLinks(HTML, Memo1.Lines);


O programa esta multi-thread, e quando o programa comeca rodar, consome muita memoria! Tem alguma outra forma ou funcao pra filtrar links ? nao encontrei no forum


Bertu

Bertu

Responder

Posts

29/08/2009

Bertu

up


Responder

Gostei + 0

01/09/2009

Bertu

up


Responder

Gostei + 0

02/09/2009

Emerson Nascimento

você está manipulando um Memo.
esta manipulação precisa estar numa área restrita da thread ou ser chamada através do método de sincronismo da thread (synchronize).

veja [url=https://www.devmedia.com.br/articles/viewcomp.asp?comp=14097]neste artigo[/url] como tratar a manipulação de um objeto que não é thread-safe.

veja se isso resolve o problema de consumo excessivo de memória.


Responder

Gostei + 0

02/09/2009

Bertu

obrigado pela resposta emerson, mais o consumo de memoria nao tem haver com essa função nao ? acho que o problema esta naquele for percorre letra por letra, pq imagina 10 threads fazendo isso! vou tentar ver esse artigo, vc sabe outra forma de filtrar esses links ? nao precisa ser necessariamente um memo....


Responder

Gostei + 0

07/09/2009

Bertu

up


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar