Fórum Localizar Links #374251
29/08/2009
0
//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
Curtir tópico
+ 0Posts
29/08/2009
Bertu
Gostei + 0
01/09/2009
Bertu
Gostei + 0
02/09/2009
Emerson Nascimento
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.
Gostei + 0
02/09/2009
Bertu
Gostei + 0
07/09/2009
Bertu
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)