Ah, da hab ich schon ne Menge antworten. Super - Klingt alles viel versprechend.
Zitat:
Die Blacklist sieht wie
XML aus, warum wird das nicht gleich als
XML genutzt?
Ja ist richtig. Die Sache ist ich hab nicht sonderlich (eher null) Ahnung von
XML. Weiss garnicht mal wozu das gut ist
Werde mich mal dransetzen und versuchen eure Vorschläge umzusetzen. Ich meld mich dann
Danke
Nachtrag:
Hab mal eure Ratschläge umgesetzt:
- Application.Messages in 1000er Schritten
- Listen werden in TStringList-Element geladen und gehandelt
- Es wird die Fileliste durchgegangen und nach Einträgen in der Blacklist gesucht anstatt für jedes Element der Blacklist einmal die Filelist durchzugehen.
Es funktioniert super.
Das mit DualCore war auf dem ersten Blick zu kompliziert für mich. Aber auch mit nur einem Kern war nach 22 Sekunden alles Fertig.
Delphi-Quellcode:
procedure TForm1.b_cleanClick(Sender: TObject);
{Entfernt die vorhandenen Einträge aus der Blacklist aus der Liste}
var y,j,i,k:Integer;
var start,ende,dauer:TDateTime;
var item:
string;
begin
i:=0;
blacklist.CaseSensitive:=False;
filelist.CaseSensitive:=False;
start:=Time;
For y := 0
to filelist.Count
Do
Begin
If y
mod 1000 = 0
{Alle 1000 Zeilen ein GUI Update}
Then
Begin
l_gesamt.Caption:=(IntToStr(y)+'
von '+inttostr(filelist.count));
Application.ProcessMessages;
end;
If y < filelist.Count
{Da TStringList während der Prozedur immer kleiner wird, muss diese Abfrage rein}
then
Begin
If Copy(filelist[y],1,19) = '
<Directory Name="'
{Falls Element der Stringlist so anfängt, muss Dateiname Extrahiert und geprüft werden}
Then
begin
item:=(Copy(filelist[y],20,(length(filelist[y])-21)));
{Dateiname herausfinden}
If blacklist.IndexOf(AnsiLowerCase(item)) <> -1
{Gibt es den Dateinamen in der Blacklist?}}
Then {Wenn ja}
Begin
k:=y;
{Markiere Anfang}
While copy(filelist[k],1,16)<>'
</Directory>'
{Markiere Ende}
Do Inc(k);
For j:= y
to k
{Lösche}
do filelist.Delete(y);
inc(i)
{Counter Hoch}
end;
End;
end;
end;
filelist.SaveToFile('
D:\Text.txt');
{Abspeichern}
filelist.Free;
blacklist.Free;
ende:=time;
dauer:=ende-start;
{Zeit berechnen}
l_zeit.Caption:=timetostr(dauer);
l_gesamt.Caption:=inttostr(i)+'
Datensätze entfernt';
end;