csvburst.c

来自「稀疏矩阵、链表、图、队列、二叉树、多叉树、排序、遗传算法等的实现」· C语言 代码 · 共 63 行

C
63
字号
/**************************************/
/*                                    */
/*   Code from the book C Unleashed   */
/*   Macmillan, 2000                  */
/*   Chapter 6: Data Files            */
/*   Steve Summit 2000-03-17          */
/*                                    */
/**************************************/

#define TRUE 1
#define FALSE 0

#include <stddef.h>

int
csvburst(char *line, char *arr[], int narr)
{
	char *p;
	int na = 0;
	char prevc = ',';   /* force recognizing first field */
	char *dp = NULL;
	int inquote = FALSE;

	for(p = line; *p != '\0'; prevc = *p, p++)
		{
		if(prevc == ',' && !inquote)
			{
			/* start new field */
			if(dp != NULL)
				*dp = '\0';  /*terminate prev*/
			if(na >= narr)
				return na;
			arr[na++] = p;
			dp = p;
			if(*p == '"')
				{
				inquote = TRUE;
				continue;      /* skip quote */
				}
			}

		if(inquote && *p == '"')
			{
			/* doubled quote goes to one quote; */
			/* otherwise quote ends quote mode */
			if(*(p+1) != '"')
				inquote = FALSE;
			p++;		/* skip first quote */
			}

		if(*p != ',' || inquote)
			*dp++ = *p;
		}

	if(dp != NULL)
		*dp = '\0';

	if(na < narr)
		arr[na] = NULL;

	return na;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?