Einzelnen Beitrag anzeigen

Cumgrinder

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

Suchen und Löschen von Text in Memos

  Alt 11. Apr 2010, 14:18
Ich hab mir ein kleines Tool geschrieben.
Es funktiniert zwar schon ganz gut, aber ich brauch mal Verbesserungsvorschläge.

Zum Programm:

1. Es wird eine Blacklist geladen mit Wörtern. (mmo_blacklist)
Code:
Haus
Pferd
Apfel
2. Es wird eine weitere Liste geladen. (Liste 2) (mmo_filelist)
Syntax:
Code:
.
<Directory Name="Auto">
     <xxxxxxxxxxxxxxxxxxxxx>
     <xxxxxxxxxxxxxxxxxxxxx>
  </Directory>
<Directory Name="Haus">
     <xxxxxxxxxxxxxxxxxxxxx>
     <xxxxxxxxxxxxxxxxxxxxx>
     <xxxxxxxxxxxxxxxxxxxxx>
  </Directory>
<Directory Name="Blume">
     <xxxxxxxxxxxxxxxxxxxxx>
     <xxxxxxxxxxxxxxxxxxxxx>
     <xxxxxxxxxxxxxxxxxxxxx>
  </Directory>

Da in der Blacklist das Wort Haus auftaucht soll in der 2ten Liste foglendes gelöscht werden:
Code:
      <Directory Name="Haus">
         <xxxxxxxxxxxxxxxxxxxxx>
         <xxxxxxxxxxxxxxxxxxxxx>
         <xxxxxxxxxxxxxxxxxxxxx>
      </Directory>

Hoffe das Prinzip ist klar geworden!!

Hier mein Code.


Delphi-Quellcode:
procedure TForm1.b_cleanClick(Sender: TObject);
{Entfernt die vorhandenen Einträge aus der Blacklist aus der Liste}
var y,i,j,k:Integer;
var start,ende,dauer:TDateTime;
var LineNum,ColNum : Word;
begin
  start:=time;
  For y:= 0 to mmo_blacklist.Lines.Count-1 {Für jedes Wort in der Blacklist gilt}
  do
    Begin
      l_gesamt.Caption := inttostr(y+1)+' von '+inttostr(mmo_blacklist.Lines.Count); {Statusanzeige aktualisieren}
        If AnsiPos(AnsiLowerCase(mmo_blacklist.Lines[y]),AnsiLowerCase(mmo_filelist.Text))=0 {Kommt Wort in Liste2 vor ?}
        then {Falls Nein, mache nichts}
        else {Falls Ja, mache:}
          begin
            mmo_filelist.SelStart:=AnsiPos(AnsiLowerCase(mmo_blacklist.Lines[y]),AnsiLowerCase(mmo_filelist.Text)); {Markiere gefundene Stelle}
            CaretPos(mmo_filelist.Handle,LineNum,ColNum); {Finde Zeile Heraus}
            j:=LineNum; {Markiere Löschbereich Anfang}
            i:=j; {Markiere Löschbereich Anfang}
            While AnsiPos('</Directory>',mmo_filelist.Lines[j])=0 {Suche Löschbereich Ende, und setzte Marker j}
            do Inc(j);
            For k:= i to j {Loesche Löschebereich Anfang bis Ende}
            do mmo_filelist.Lines.Delete(i);

          end
    end;
  mmo_filelist.Lines.SaveToFile(dlgOpen_filelist.FileName); {Abspeichern}
  ende:=Time;
  dauer:=ende-start;
  l_zeit.caption:=timetostr(dauer);

end;
Die Blacklist hat ca. 5000 Einträge.
Liste 2 hat ca. 150000 Zeilen.

Meine Fragen:

Ich hab ein DualCore Rechner, aber nur ein Kern arbeitet. Wie kann ich den 2ten Kern auch ansprechen?

Ich wollte eine Fortschrittsanzeige einbauen aber sobald ich den Vorgang starte, friert das Programm ein und reagiert nicht bis er die Listen abgearbeitet hat.
Woran liegt das ? Das muss man ja irgendwie ändern können?!


Die Listen sind sehr lang, ist klar dass es nicht mal eben in 2 Minuten funktioniert.
Aber nach meheren Stunden spuckt er immernoch nichts aus. Habt ihr generelle Optimierungsvorschläge ?


Danke im voraus
  Mit Zitat antworten Zitat