Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.431 Beiträge
 
Delphi 12 Athens
 
#19

AW: Große String-Liste out of Memory - Hilfe?

  Alt 20. Apr 2014, 23:03
Ich denke, gemeint mit der Lösung ist die For-While Schleife mit Continue?

Eigentlich zielte ich eher auf die Rekursion hin. Also in etwa so:

Delphi-Quellcode:
function TForm1.bruteforce(astring: string;substr: string; startlen: integer; endlen: integer):LongInt;

  procedure CheckURL(const url: string);
  begin
    spider.Initialize(urlk);
    spider.CrawlNext();

    Edit1.Text := Spider.LastUrl;
    Edit2.Text := Spider.LastHtmlTitle;

    If Edit2.Text = 'Vorhandenthen begin
      Memo4.Lines.Add (Edit1.Text);
    end;
  end;

  Procedure TesteString(const Basis: string);
  var
    npw: string;
    I: Integer;
  begin
    for I := 1 to Length(astring) do begin
      npw := Basis + astring[I];
      if startlen <= Length(npw) then begin
        CheckURL(urls + npw);
      end;
      { Abbruchbedingung }
      if Length(npw) < endlen then begin
        { hier probieren wir dann ein Zeichen mehr }
        TesteString(npw);
      end;
    end;
  end;

var
  I: Integer;
begin
  For I := 1 to length(substr) do begin
    TesteString(substr[I]);
  end;
end;
Bei solchen Rekursionen muss man zwar auf seinen Stack aufpassen, aber da der Parameter als const übergeben wird, der lokale string auf dem Heap angelegt wird und die Rekusionstiefe maximal endlen ist sollte das kein Problem werden. Diese Lösung verbraucht fast gar keinen Speicher.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat