| iMatix home page | << | < | > | >> |
SFL Version 2.11 |
#include "sflstr.h" int isoneoftokens ( char **strbuf, char *strmat, char *strsep, int *iWasToken)
Eats strToEat from strBuff only if it begins with contents of strToEat, and returns a 0 or 1 to tell what it did. Returns 0 if nothing found, and >= 1 which is an index of the one found.
char strBuff[] = { "select * from mytbl;" }; int iWasToken; isoneoftokens (&strBuff, "INSERT|SELECT|DELETE", "|", &iWasToken); On return here iWasToken would == 1, and strBuff would be: " * from mytbl;" and the return value would be 2. If the token is not found, then strBuff will not be affected, and a 0 will be returned. Submitted by Scott Beasley <jscottb@infoave.com>
{ int nstate = 0, cnt = 0, icmpres; int iLen; char *strtemp, cChar; ASSERT (strbuf); ASSERT (strmat); ASSERT (strsep); ASSERT (iWasToken); while (1) { iLen = getstrfldlen (strmat, cnt, 0, strsep); strtemp = (char *) malloc (iLen + 1); getstrfld (strmat, cnt, 0, strsep, strtemp); if (*strtemp) { trim (strtemp); icmpres = lexncmp (*strbuf, strtemp, strlen (strtemp)); if (!icmpres) { cChar = *(*strbuf + strlen (strtemp)); if (!isalpha ((int)cChar)&& cChar != '_') { *iWasToken = cnt + 1; strcpy (*strbuf, (*strbuf + strlen (strtemp))); nstate = cnt + 1; } break; } else { if (!lexncmp (*strbuf, strtemp, strlen (strtemp))) { cChar = *(*strbuf + strlen (strtemp)); if (!isalpha ((int)cChar)&& cChar != '_') { *iWasToken = cnt + 1; strcpy (*strbuf, (*strbuf + strlen (strtemp))); nstate = cnt + 1; } break; } } } else { *iWasToken = 0; nstate = 0; break; } cnt++; free (strtemp); } return nstate; }
| << | < | > | >> | Copyright © 1996-2000 iMatix Corporation |