![]() |
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 |
Re: Wortliste erstellen
Moin Thorsten,
such' hier doch mal nach ![]() Das hatten wir vor kurzem erst ein paar Mal. |
Re: Wortliste erstellen
Mit
![]()
Delphi-Quellcode:
TWordArray ist eine dynamisches Array vom Typ:
{------------------------------------------------------------------------------}
{ 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;
Delphi-Quellcode:
Im Feld Word sthet dann das Wort und im Feld Count die Häufigkeit.
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; |
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:
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?
TextWordList := Explode(' ', Text);
|
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.
|
Re: Wortliste erstellen
Zitat:
|
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