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

FreeBSD Manual Pages

  
 
  

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

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

SYNOPSIS
       #include	<strfunc.h>

       Split string and	add tokens to the string array

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

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

       int
       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

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

DESCRIPTION
       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 skip-
		  ping.

	     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 vec-
       tor, or -1 in case of an	error caused by	memory shortage	or regular ex-
       pressions handling failure.

       svect * split(const char	*string, const char *set, int flags) is	 iden-
       tical  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 appropriate 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	 with-
       out 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
       recognized  ip  address	and  mask  in  network	byte  order.  Refer to
       byteorder(3) or	ntohl(3).   split_network()  regognizes	 the  standart
       forms of	ip address/mask	pairs:

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

EXAMPLES
       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 */
	       sfree(sl);
       };

       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 */
	       sfree(sl);
       };

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

AUTHORS
       Lev Walkin <vlm@lionet.info>

FreeBSD	Ports 14.quarterly	March 29, 2001			   sf_split(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=split_network&sektion=3&manpath=FreeBSD+Ports+14.3.quarterly>

home | help