Liebe Leute,
ich hätte noch eine weitere Frage, die v.a. die Performance angeht. Ich habe rund 5000 Textdateien, die zeilenweise aus Wörtern bestehen (genauer: jede Zeile hat das Format ZuZählenderAusdruck TAB EinUninteressantesWort TAB NochEinUninteressantesWort). Ich möchte die einzelnen Wörter jeder Datei zählen und in eine Liste addiert zusammenfassen. Jede Textdatei hat im Schnitt 4000 Zeilen, macht insg. ~ 20000000 zu verarbeitende Zeilen. Den Code, den ich bisher dazu habe, braucht aber viel zu lang (~Stunde..). Hat jemand eine Idee, wie ich das optimieren könnte?
Danke und viele Grüße,
frieder
Delphi-Quellcode:
Procedure Clickblabla();
var
TokenListeKorpus, tokenlist: tstringlist
begin
TokenListeKorpus:= tstringlist.create;
tokenlist:= tstringlist.create;
{Lade Textdatei in tokenliste..}
ZaehleAlleWoerterDerListe(tokenlist {Quelldatei}, TokenListeKorpus {Gesamtliste});
{Gib die TokenListeKorpus aus, gib die Listen frei usw.}
end;
Procedure ZaehleAlleWoerterDerListe(const tokenliste: tstringlist; var TokenListeKorpus: tstringlist);
var
i: integer;
token: string;
begin
for i:= 0 to tokenliste.count-1 do
begin
token:= gibmirtoken(tokenliste.strings[i], #9);
if TokenListeKorpus.Values[token] = '' then
TokenListeKorpus.Values[token] := '1'
else
TokenListeKorpus.Values[token]:= inttostr(strtoint(TokenListeKorpus.Values[token]) + 1);
end;
end;
function gibmirtoken(s:string; sep:char) :string;
begin
Result := Copy(s, 1, Pos(sep, s) - 1);
{ Funktion ermittelt aus tokenliste.zeile den zu zählenden "Ausdruck" der Zeile, die das
folgendes Format hat: Ausdruck TAB EinUninteressantesWort TAB NochEinUninteressantesWort }
end;