Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wortliste erstellen (https://www.delphipraxis.net/17407-wortliste-erstellen.html)

Logic 4. Mär 2004 22:59


Wortliste erstellen
 
Hallo,

wie kann ich z.b. eine Datei auslesen und die Wörter dieser Datei anzeigen und auch anzeigen lassen wie oft sie benutzt wurden?

mfg
Thorsten

Christian Seehase 4. Mär 2004 23:12

Re: Wortliste erstellen
 
Moin Thorsten,

such' hier doch mal nach Hier im Forum suchenWortliste, [dp]Worte zählen[/dp] oder [dp]Wörter zählen[/dp].
Das hatten wir vor kurzem erst ein paar Mal.

Luckie 4. Mär 2004 23:46

Re: Wortliste erstellen
 
Mit explodeexplode 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.

Jens Schumann 5. Mär 2004 08:01

Re: Wortliste erstellen
 
Moin Luckie,
Dein source wirft bei mir eine Verständnisfrage im Zusammenhang mit dyn. Array's auf.
Da ich grundsätzlich auf dyn. Array's verzichte bin ich hier nicht besonders fit.
Die Variable TextWordList ist so ein dyn Array. Mit
Delphi-Quellcode:
TextWordList := Explode(' ', Text);
speicherst Du in TextWordList eine Referenz auf ein in Explode erzeugtes dyn. Array (ist ja auch der Ergebnistype der Funktion). Jetzt belegen aber auch dyn. Array Arbeitsspeicher auf dem Heap. In der Hilfe steht, dass dyn. Array mit der Zuweisung von Nil freigegeben werden. Das fehlt in Deinem Code. Kann es auch sein das dyn. Array's automatisch freigegeben werden wenn der Gültigkeitsbereich der Variablen (hier: TextWordList) verlassen wird?

Luckie 5. Mär 2004 15:24

Re: Wortliste erstellen
 
Ich habe es extra beobachtet im Taskmanger. Im original Code von Explode hier im Forum wird, das Array immer um 5 erhöht. Da ist mir bei eienm 1 MB Text selbst mit 1 GB RAM der Soeicher ausgegangen. Ich haeb dann Explode das Array immer um 1000 vergrößern lassen und da ging es dann. Da ist der Speicher der anwendung von 4 oder 5 Mb auf 9 MB hochgegangen aber danach wieder auf 4 oder 5 zurück. Das sind meiner Erfahrungen. Es scheint also zu gehen. Delphi gibt also die lokale Variable TextWordList, nach verlassen der Prozedur selbst wieder frei.

Jens Schumann 5. Mär 2004 15:34

Re: Wortliste erstellen
 
Zitat:

Zitat von Luckie
Delphi gibt also die lokale Variable TextWordList, nach verlassen der Prozedur selbst wieder frei.

Das hätte ich jetzt nicht erwartet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz