On Tue, 3 Jul 2018, Marco van de Voort wrote:

In our previous episode, Michael Van Canneyt said:

> In our previous episode, Michael Van Canneyt said:
>> >> What's the easiest way to split a stream into words ?
>
> Doesn't strutils have some word extraction and count functions?

It does: WordCount,ExtractWord, but they are very inefficent.


function splitstring(const s:string;c:char):TStringList;

var i,i2,j : integer;
   x : string;
begin
 result:=TStringlist.create;
 i:=0;
 repeat
   j:=PosEx(c,s,i+1);
   i2:=j;
   if i2=0 then i2:=length(s)+1;
   x:=trim(copy(s,i+1,i2-i-1));
   result.add(x);
   i:=j;
 until j=0;
end;

Afaik I also must have a variant with posset somewhere. In another variant
I use a class around a array of string, which keeps a count of valid
entries. This avoids setlengths on repeated use. All fairly trivial.

Trivial indeed, till you need more fine-grained control.
e.g. C needs to be an array of chars that mark word boundaries etc.

But I managed to solve the problem with regexps...

Michael.
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to