Mit
explode und als Trennzeichen das Leerzeichen den Text zerlegen. Die wörter in eine sortierte Stringliste packen und so einstellen, dass Duplikate ignoriert werden und dann meine Prozedur anwenden:
Delphi-Quellcode:
{------------------------------------------------------------------------------}
{ Worthäufigkeit ermitteln }
{------------------------------------------------------------------------------}
procedure Occurence(sl: TStrings; Text: string; var WordArray: TWordArray);
var
OuterLoop, InnerLoop: Cardinal;
TextWordList: TStringDynArray;
Count: Cardinal;
begin
TextWordList := Explode(' ', Text);
Count := 1;
// Wortliste durchgehen
for OuterLoop := 0 to sl.Count - 1 do
begin
for InnerLoop := 0 to Length(TextWordList) - 1 do
begin
if sl.Strings[OuterLoop] = TextWordList[InnerLoop] then
inc(Count);
end;
WordArray[OuterLoop].Word := sl.Strings[OuterLoop];
WordArray[OuterLoop].Count := Count;
Count := 1;
if bCancel = 1 then
Break;
end;
end;
TWordArray ist eine dynamisches Array vom Typ:
Delphi-Quellcode:
type
TStringDynArray = array of string; // um Textzeile in Wörter-Array zu zerlegen
TWordRec = record // zu jedem Wort gehört die Anzahl
Word: ShortString;
Count: Cardinal;
end;
TWordArray = array of TWordRec;
Im Feld
Word sthet dann das Wort und im Feld
Count die Häufigkeit.