Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
sf_split(3)		 BSD Library Functions Manual		   sf_split(3)

     split, splitf, splitquotable, sjoin, join,	split_network -- split and
     join functions

     #include <strfunc.h>

     Split string and add tokens to the	string array

     svect *
     split(const char *string, const char *delim, int flags);

     splitf(svect *, const char	*string, const char *delim, int	flags);

     splitquotable(svect *, const char *string);

     Join the array tokens together

     char *
     join(char **, const char *delimiter);

     char *
     sjoin(svect *, const char *delimiter);

     Stand-alone network/mask splitting	function

     split_network(const char *ip_mask,	unsigned int *ip, unsigned int *mask);

     These routines allows to split or join strings by specified tokens.

     int splitf(svect *, const char *string, const char	*delim,	int flags) is
     the basic splitting function.  string specifies the source	string.	 delim
     specifies the delimiter to	be used	to split string	into tokens.  flags is
     the bitwise OR of the following values:

	   1	two or more joined delimiters will be considered to be dis-
		tinct instead of assuming them as one delimiter	and skipping.

	   2	delimiter will be considered as	the pointer to delimiting
		string instead of assuming it as the pointer to	character set.

	   4	delimiter is the regular expression.  Regular expression can
		be prefixed with and followed by /'es if there is a need to
		put some flags after it. Refer to sf_sed(3) to obtain a	flags
		and additional information about regular expressions.  Setting
		this flag automaticaly discards	1 & 2.

     Return value is the number	of tokens recognized and added to the vector,
     or	-1 in case of an error caused by memory	shortage or regular expres-
     sions handling failure.

     svect * split(const char *string, const char *set,	int flags) is identi-
     cal to the	splitf() in one	exception that it will create a	new svect *
     structure for you.	The structure will always be allocated,	but it can
     contain no	data if	splitf() will be unable	to find	any tokens.

     int splitquotable(svect *sl, const	char *string) is the function that
     recognizes	single and double quotes and splits string according to	them.
     There is a	small hack that	allows to know whether this or that piece of
     string (token) was	originally inside the double or	single quotes. The
     character (byte) right after the end of string within the list
     sl->list[N][sl->lens[N] + 1] will contain the ' ',	'1' or '2' if the ap-
     propriate token was originaly found within	the unquoted text, single or
     double quotes, respectively.

     To	join vector elements together, sjoin(svect *, const char *delimiter)
     function may be called. Another call, join(char **list, const char
     *delimiter), may be required to join the char ** values together without
     using an intermediate svect * structure.

     int split_network(const char *ip_mask, unsigned int *ip, unsigned int
     *mask) used to split IP/Mask strings to binary IP address and mask. Both
     ip	and mask arguments should be supplied. They will be filled with	recog-
     nized ip address and mask in network byte order. Refer to byteorder(3) or
     ntohl(3).	split_network()	regognizes the standart	forms of ip ad-
     dress/mask	pairs:

	     a.b.c.d 0xHEXMASK
	     a.b.c.d a.b.c.d
	     or, more common
	     a[.[b[.c[.d]]]] a.b[.c[.d]]]

     Example split function...

     void removeMultipleSpaces(const char *string) {
	     svect *sl;

	     /*	Split string="some   bad   string"
	      *	and add	tokens to the vector
	     sl	= split(string,	NULL, 0);

	     /*	And join them together to form
	      *	"some bad string"
	     printf("%s\n", sjoin(sl, "	"));

	     /*	Destroy	the string vector */

     Split according to	quotes

     void quotes(const char *string) {
	     svect *sl;
	     int i;

	     /*	Create new string vector */
	     sl	= sinit();

	     /*	Split string=" one 'two	three' four
	      *	and add	tokens to the vector
	     sl	= splitquotable(sl, string);

	     /*	And join them together to form
	      *	"[one],	[two three], [four], [five]"
	     printf("[%s]\n", sjoin(sl,	"], ["));

	     /*	Single or double quoted? */
	     for(i = 0;	i < sl->count; i++)
		     printf("%s: %s\n",	sl->list[i],
			     (sl->list[i][sl->lens[i] +	1] == 0)?"plain	text":
			     ((sl->list[i][sl->lens[i] + 1] == 1)?"single quoted":
			     ((sl->list[i][sl->lens[i] + 1] == 2)?"double quoted"))

	     /*	Destroy	the list */

     strfunc(3), sf_svect(3), sf_sed(3), byteorder(3).

     Lev Walkin	<>

BSD				March 29, 2001				   BSD


Want to link to this manual page? Use this URL:

home | help