[fpc-pascal]Word count function

James_Wilson at i2.com James_Wilson at i2.com
Mon Oct 1 22:41:16 CEST 2001


Florian;

>>const
>>  DELIMITERS = ' .,!?_-)}]>;:=@/\#9';
>Replace the string by a set, this is much faster:
>const
>DELIMITERS : set of char = [' 
','.',',','!','?','_','-',')','}',']','>',';',':','=','@','/','\',#9];

>if StringToCheck [succ (Index)] in DELIMITERS then
>should beat the pos call easily

Much faster? Boy, was that an understatement. The original version I had 
posted checked an entire 30 meg ASCII text file in a pathetic 2 minutes. 
Simply making the 2 changes above that you had suggested dropped that to a 
mind-blowing 4 seconds! That's a staggering difference. But I must confess 
that I don't know exactly why there would be such a huge difference. Why 
is a "set of char" soooo much faster then a const?

>while (Index < LineLength) and (CurrentChar in 
['A'..'Z','a'..'z','0'..'9']) do
>might be faster as well

This was certainly cleaner looking then what I had posted, but I can't 
honestly tell if it makes much difference because the previous update was 
so fast it left little room for improvement!  :-)

Thanks much for the tip...

Jim
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20011001/8d775fed/attachment.html>


More information about the fpc-pascal mailing list