> Dunno if this is the right place to post such a message, but here goes... > I would love to see a "pos" function that takes an additional parameter, being > the position in the string where it should START scanning. e.g.: > my_str = 'Hello, everybody... Hello, world!'; > x := pos ('Hello', my_str, 6); > So it starts scanning at position 6 (after the first Hello) and finds the > second Hello at position 21; returns 21. (not 21-6) > Passing it a starting position 2 (instead of 6) would also skip the first > Hello, and return the same 21. > (( Of course, passing it a starting position greater than the length(str) - > length(target) should return 0; also it should return 0 if the target is not found > between startpos and the end of the string. ))
Dunno if this is the right place to post such an answer, but here goes... program postest; {$H+}{$MODE OBJFPC} uses strings; function PosFrom( const needle:AnsiString; const haystack:AnsiString; StartPt:LongInt):LongInt; var p:pChar; begin Result:=0; if (StartPt <= Length(haystack)) then begin p:=StrPos(pChar(@haystack[StartPt]), pChar(needle)); if ( p <> nil ) then Result:= ( p - @haystack[1] ) + 1; end end; // Testing ... var subject, pattern : string; i:integer; begin subject := 'Hello, everybody... Hello, world!'; pattern := 'Hello'; for i:=1 to length(subject) do WriteLn('Position from ', i, ' is ', PosFrom(pattern, subject, i)); end. __________________________________ Do you Yahoo!? Yahoo! Search - Find what you’re looking for faster http://search.yahoo.com _______________________________________________ fpc-pascal maillist - [EMAIL PROTECTED] http://lists.freepascal.org/mailman/listinfo/fpc-pascal