Leider wird '...' als 3 Sätze gezählt, und der leere String ergibt '1 Wort'...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| procedure CountWordsAndSentences (Const aText : String; Var SentenceCount, WordCount : Integer); Const SentenceDelimiter = ['.','!','?']; WordDelimiter = [' ',#13,#10,','];
var i,l,i0,j0 : integer; begin SentenceCount := 0; WordCount := 0; i0 := i; j0 := 1; For i:=1 to Length (aText) Do Begin if aText[i] in SentenceDelimiter Then Begin if i-i0>2 then inc (SentenceCount); i0 := i; End else if aText[i] in WordDelimiter Then Begin If i-j0>2 Then inc (WordCount); j0 := i; End; End; |
Über die Hilfsvariablen i0 (Ende des letzten Satzes( und j0 (Ende des letzten Wortes) stelle ich sicher, das Sachen wie '...' oder zwei Leerzeichen nicht doppelt gezählt werden.
Auf einen Aufruf als Thread kann verzichtet werden, das die Routine schnell genug ist (im Millisekundenbereich),
Na denn, dann. Bis dann, denn.