home *** CD-ROM | disk | FTP | other *** search
- ========
- Newsgroups: comp.lang.pascal.delphi.misc
- Subject: Re: String Tokenizer for Delphi...
- From: Dave Cameron <davec@mstone.demon.co.uk>
- Date: Tue, 29 Aug 95 09:35:58 GMT
-
- In article <40ss6q$gt5@allnews.infi.net>
- RobinS@mailhost.richmond.infi.net "RobinS" writes:
-
- > Anyone have code, component, or advice on how to achieve the strTok
- > functionality in Turbo Pascal?
-
- No guarantees, but this seemed to do the job:-
-
- ---------------------------Tear Here----------------------------------
- { Separate tokens in NULL-terminated ANSI string ---------------------- }
- { This is an untested version of the 'C' 'StrTok' function for the ---- }
- { Windows ANSI character set (should work with 2-byte character codes) }
-
- var
- AnsiTokPtr: PChar;
-
- function AnsiTok( Src: PChar; Delim: PChar ) : PChar;
- var
- TokStart: PChar;
- P: PChar;
-
- function IsDelim( C: char ) : Bool;
- var
- D: PChar;
- res: Bool;
-
- begin
- D := Delim;
- res := FALSE;
- repeat
- begin
- if( C = D^ ) then
- res := TRUE;
- D := AnsiNext( D );
- end;
- until( ( D^ = NULL ) or res );
- IsDelim := res;
- end;
-
- begin
- if( Src <> nil ) then
- AnsiTokPtr := Src;
-
- { Initialise running pointer }
- P := AnsiTokPtr;
-
- { Scan for start of token }
- while( IsDelim( P^ ) ) do
- P := AnsiNext( P );
- if( P^ = NULL ) then
- TokStart := nil
- else
- TokStart := P;
-
- { Scan for end of token }
- while( ( P^ <> NULL ) and not IsDelim( P^ ) ) do
- P := AnsiNext( P );
-
- { Update the token string pointer and terminate the token string }
- AnsiTokPtr := AnsiNext( P );
- P^ := NULL;
-
- { Return pointer to token }
- AnsiTok := TokStart;
-
- end;
-
-
- ---------------------------Tear Here----------------------------------
-
- --
- Dave Cameron
- ======================================================================
- Milestone Systems Ltd, Avonbridge, Scotland. davec@mstone.demon.co.uk
- ======================================================================
-