Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.477 Beiträge
Delphi 12 Athens
|
AW: Stringlist; Häufigkeit einzelner Wörter
24. Sep 2013, 10:29
Mal ein anderer Ansatz ohne Countlist.
Delphi-Quellcode:
{
Trennung von Funktion und Oberfläche:
Damit die Funktion überall verwendet werden kann,
werden die Daten und Objekte anonym über Parameter übergeben.
}
procedure GibAnzahlWoerterAus(AList: TStrings; const AText: String);
var
st_woerter: TStringlist;
i, n, nGesamt: Integer;
begin
st_woerter := TStringlist.Create;
try
st_woerter.CommaText := Memo1.text;
{Leerzeichen am Anfang und Ende der Wörter entfernen}
for i := 0 to st_woerter.Count - 1 do
st_woerter[i] := Trim(st_woerter[i]);
{sortieren}
st_woerter.Sort;
sWort1 := '';
n := 0;
nGesamt := 0;
for i := 0 to st_woerter.Count do
begin
if i < st_woerter.Count then
sWort2 := st_woerter[i]
else
sWort2 := '';
{Wort ist unverändert -> Anzahl erhöhen}
if sWort1 = sWort2 then
Inc(n)
else
begin
{altes Wort + Anzahl ausgeben, Gesamtsumme anpassen}
if sWort1 <> '' then
begin
AList.Add(IntToStr(n) + 'x ' + sWort1);
Inc(nGesamt, n);
end;
{neues Wort merken und Zähler neu starten}
sWort1 := sWort2;
n := 1;
end;
end;
AList.Add('In diesem Text sind es insgesamt ' + IntToStr(nGesamt) + ' Wörter.');
finally
{Objekte die man erzeugt, muss man auch freigeben}
st_woerter.Free;
end;
end;
{
In der Ereignisbehandlung werden die konkreten Objekten an die Funktion übergeben,
aber in der Regel wird nur minimale Funktionalität implementiert.
}
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo2.Lines.Clear;
GibAnzahlWoerterAus(Memo2.Lines, Memo1.Text);
end;
|
|
Zitat
|