Re: Re: Number of Words in a String

*To*: mathgroup at smc.vnet.net*Subject*: [mg102550] Re: [mg102538] Re: Number of Words in a String*From*: "David Annetts" <davidannetts at aapt.net.au>*Date*: Thu, 13 Aug 2009 03:21:53 -0400 (EDT)*References*: <h5r8b5$l4q$1@smc.vnet.net> <200908120837.EAA14797@smc.vnet.net>

Hi Albert, > I don't know what you did when turning it into a function, but this: > > numwords[s_String] := Length[ReadList[StringToStream[s], Word]] > > numwords["The cat in the hat."] > > seems to work alright.... It does for a few calls. But many calls to this (or similar) functions leaves many open streams which slows your machine. To see this, try the following sequence (which numwords defined as above) opn = Streams[] numwords@"the cat in the hat" & /@ Range[15]; opn = Streams[] The streams can be closed using Close[#]& /@ Select[opn, SameQ[Head@#, InputStream] &]; There are at least three remedies to this. One is to remember to periodically close all opened streams. Another is to modify Albert's function to something like numwordsb[s_String] := Block[{opn, lng}, lng = Length[ReadList[opn = StringToStream[s], Word]]; Close[opn]; lng] But the most effective is probably to avoid StringToStream as much as you can. For me, this is by using Import[, "Table"] rather than my <6.0 hand-rolled code. YMMV. Regards, Dave.

**References**:**Re: Number of Words in a String***From:*Albert Retey <awnl@gmx-topmail.de>