Lazarus

Free Pascal => Beginners => Topic started by: JLWest on March 20, 2019, 01:50:20 am

Title: ExtractWordPos ?
Post by: JLWest on March 20, 2019, 01:50:20 am

function ExtractWordPos( N: Integer;
const S: string;
const WordDelims: TSysCharSet;
var Pos: Integer) : string;

I think I would like to use this function but not sure how to call it.

Var
aPos      : Integer;
Item      : String = 'Now is the time for all good men';

begin
Answer := ExtractWordPos(4,Item,['  '] , aPos);

And wouldb't it return 4 because I specifying 4 in  "N: Integer";

It's obvious that I'm not reading this right;
Title: Re: ExtractWordPos ?
Post by: lucamar on March 20, 2019, 02:11:45 am
The function returns the Nth word as result and the character position in which it was found in Pos

With your example it should return "time" and "aPos = 12". Does it return something else?
Title: Re: ExtractWordPos ?
Post by: BobDog on March 20, 2019, 02:51:13 am

According to the help file
. . .
function ExtractWordPos(
N: Integer;
const S: string;
const WordDelims: TSysCharSet;
out Pos: Integer
):string;

N   Which word to extract
S    String to extract a word from.
WordDelims  Characters to use as word delimiters
Pos    On return, contains the position of the N-th word.
. . .
But if I make the deliminator more than one character I get an error.
So, just one space as deliminator.
Code: Pascal  [Select][+][-]
1.
2.
3. program pos;
4. uses strutils;
5.
6.
7. Var
9.  aPos      : Integer;
10.  Item      : String = 'Now is the time for all good men';
11.
12. begin
13. Answer := ExtractWordPos(4,Item,[' '] , aPos);
16.
18. end.

result
time  12

Title: Re: ExtractWordPos ?
Post by: lucamar on March 20, 2019, 04:10:40 am
But if I make the deliminator more than one character I get an error.
So, just one space as deliminator.

WordDelims is a TSysCharSet, i.e. a set of AnsiChar; which means you can use, say:
Code: [Select]
`FoundWord := ExtractWordPos(N, SrcStr, [' ', ',', '.', ':', ';'], APos);`but, of course, not something like:
Code: [Select]
`FoundWord := ExtractWordPos(N, SrcStr, [':::', '=='], APos);`
Title: Re: ExtractWordPos ?
Post by: JLWest on March 20, 2019, 04:38:55 am
Thank you;