Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Stringlist; Häufigkeit einzelner Wörter

  Alt 24. Sep 2013, 09: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;
  Mit Zitat antworten Zitat