Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wörter zählen, optmimieren? (https://www.delphipraxis.net/7764-woerter-zaehlen-optmimieren.html)

notErnie 19. Okt 2004 23:42

Re: Wörter zählen, optmimieren?
 
Bei den Trennzeichen für's "Wörter zählen" sollte man vielleicht auch noch Frage- und Ausrufungszeichen (?!) berücksichtigen :)

Nicht jeder will nur die Wörter im Sourcecode zählen :mrgreen:

Bert

Nothine 20. Okt 2004 00:31

Re: Wörter zählen, optmimieren?
 
der ansatz die trennzeichen zu zählen ist ja ganz interessant, aber es gibt alle möglichen arten von trennungen, manchmal^würden^menschen sowas sogar zusammenschreiben, was macht man da? sich mal meinen vorschlag anhören :mrgreen:

wörter bilden sich im regelfall aus buchstaben, dafür sind sie bekannt, also warum nicht sobald ein wort anfängt den counter erhöhen und bis zum ende des wortes weitergehen? konkret sähe das folgendermaßen aus...
Delphi-Quellcode:
function WordCount(const S: string): Integer;
const ValidChars = ['a'..'z','A'..'Z','ä','ö','ü','Ä','Ö','Ü','ß'];
var P: PChar;
begin
  Result := 0;
  if S = '' then Exit;
  P := Pointer(S);
  repeat
    if P^ in ValidChars then begin
      while (P^ in ValidChars) and (P^ <> #0) do
        Inc(P);
      Inc(Result);
    end else Inc(P);
  until P^ = #0;
end;

notErnie 20. Okt 2004 01:39

Re: Wörter zählen, optmimieren?
 
@Nothine:

Den Ansatz hatten wir (fast) schon mal weiter oben - ohne die Pointer.

Aus Deiner Idee kann noch was werden, wenn Du Deine "ValidChars" noch um Zahlen oder z.B. italienische, spanische oder türkische Buchstaben erweiterst...

Aber so im Großen und Ganzen bevorzuge ich doch eher das Parsen nach Trennzeichen :pale:

Tschulligung: "Wörter zählen" ist (und bleibt) leider ein Scheiß-Thema, das möglicherweise zu lösen wäre, wenn ...

...wenn es nur eine Sprache gäbe...

Komplett naive (realitätsfremde) Grüße daher/dazu von
Bert

negaH 20. Okt 2004 08:52

Re: Wörter zählen, optmimieren?
 
Zitat:

bei jeder Art Stringliste, eben auch RichEdit.Lines, wird die Eigenschaft Text bei jedem Lesezugriff auf diese Eigenschaft aus den gesamten Strings zusammengesetzt, und bei jedem Schreibzugriff werden die Zeilen anschliessend neu aufgebaut.
Das ist das, was so auf die Performance drückt.
Das stimmt für Delphis TStringList Objecte, aber eben nicht für RichtEdits. RichEdits verwalten intern den kompletten Textin einem linearen Speicher. Bei jedem Zugriff auf die Property .Text wird intern nun vom Windows API RichEdit Control der Text angefordert. Nun, das Windows API läuft bekannt bei Fensterhandles immer über Messages. D.h. .GetText muß mie SendMessage() arbeiten, intern wird dann der Text-Speicher in den vorher allozierten String kopiert. Pro Zugriff auf die Property .Text entstehen also 2 SendMessages (1 um die Größe des Textes zu holen, 1 um den Text zu holen) + eine Speicherallozierung eines LongStrings mit Setlength() und eine Speicherkopierung. Sollte der Text also 1Mb betragen, wird jedesmal beim Aufruf von .Text[I] ein neuer Speicherbereich mit 1Mb Daten kopiert.
Das das langsam sein muß ist ja wohl klar.

Gruß Hagen

PS: Variablen sind die Freunde des Programmierers ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:02 Uhr.
Seite 2 von 2     12   

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