Skip to content

Tokenise a string from a single char deliminator. This is an alternative to strtok but with escaped character support for deliminating a string with a single char (e.g. csv or psv)

License

Notifications You must be signed in to change notification settings

mofosyne/strtok_escaped.c

Repository files navigation

strtok_escaped

CI/CD Status Badge

Tokenise a string from a single char deliminator. This is an alternative to strtok but with escaped character support for deliminating a string with a single char (e.g. csv or psv)

install

$ clib install mofosyne/strtok_escaped.c

usage

// Non Reentrant
char *str = "apple|banana|cherry";
char *token = strtok_escaped(str, delim);
while (token != NULL) {
    printf("%s\n", token);
    token = strtok_escaped(NULL, delim);
}
// Reentrant
char *str = "apple|banana|cherry";
char *last_token_end = NULL;
while (0)
{
    const char *token = strtok_escaped_r(last_token_end, str, delim);
    if (token == NULL)
        break;
}

Expected Test Output

This is useful to get a sense of how this will work:

strtok_escaped() Test Case 0: 'apple|banana|cherry'
Token: 'apple' - ok
Token: 'banana' - ok
Token: 'cherry' - ok
PASSED

strtok_escaped() Test Case 1: 'apple\|banana|cherry'
Token: 'apple|banana' - ok
Token: 'cherry' - ok
PASSED

strtok_escaped() Test Case 2: 'apple|banana|cherry\'
Token: 'apple' - ok
Token: 'banana' - ok
Token: 'cherry\' - ok
PASSED

strtok_escaped() Test Case 3: 'apple\|banana|cherry\'
Token: 'apple|banana' - ok
Token: 'cherry\' - ok
PASSED

strtok_escaped() Test Case 4: 'apple|banana\|cherry'
Token: 'apple' - ok
Token: 'banana|cherry' - ok
PASSED

strtok_escaped() Test Case 5: 'apple\|banana\|cherry'
Token: 'apple|banana|cherry' - ok
PASSED

strtok_escaped() Test Case 6: 'apple\\|banana|cherry'
Token: 'apple\|banana' - ok
Token: 'cherry' - ok
PASSED

strtok_escaped() Test Case 7: 'apple\|banana\|cherry\'
Token: 'apple|banana|cherry\' - ok
PASSED

strtok_escaped() Test Case 8: 'apple|ba\nana|cherry'
Token: 'apple' - ok
Token: 'ba\nana' - ok
Token: 'cherry' - ok
PASSED

strtok_escaped() Test Case 9: ''
PASSED

strtok_escaped_r() Test Case 0: 'apple|banana|cherry'
Token: 'apple' - ok
Token: 'banana' - ok
Token: 'cherry' - ok
PASSED

strtok_escaped_r() Test Case 1: 'apple\|banana|cherry'
Token: 'apple|banana' - ok
Token: 'cherry' - ok
PASSED

strtok_escaped_r() Test Case 2: 'apple|banana|cherry\'
Token: 'apple' - ok
Token: 'banana' - ok
Token: 'cherry\' - ok
PASSED

strtok_escaped_r() Test Case 3: 'apple\|banana|cherry\'
Token: 'apple|banana' - ok
Token: 'cherry\' - ok
PASSED

strtok_escaped_r() Test Case 4: 'apple|banana\|cherry'
Token: 'apple' - ok
Token: 'banana|cherry' - ok
PASSED

strtok_escaped_r() Test Case 5: 'apple\|banana\|cherry'
Token: 'apple|banana|cherry' - ok
PASSED

strtok_escaped_r() Test Case 6: 'apple\\|banana|cherry'
Token: 'apple\|banana' - ok
Token: 'cherry' - ok
PASSED

strtok_escaped_r() Test Case 7: 'apple\|banana\|cherry\'
Token: 'apple|banana|cherry\' - ok
PASSED

strtok_escaped_r() Test Case 8: 'apple|ba\nana|cherry'
Token: 'apple' - ok
Token: 'ba\nana' - ok
Token: 'cherry' - ok
PASSED

strtok_escaped_r() Test Case 9: ''
PASSED

All tests passed.

license

GNUv3

About

Tokenise a string from a single char deliminator. This is an alternative to strtok but with escaped character support for deliminating a string with a single char (e.g. csv or psv)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published