Einzelnen Beitrag anzeigen

Cumgrinder

Registriert seit: 11. Apr 2010
7 Beiträge
 
#6

Re: Suchen und Löschen von Text in Memos

  Alt 11. Apr 2010, 17:16
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;
  Mit Zitat antworten Zitat