#include
#include
#include
#define N 9
typedef struct a{
char *p[N];
int num;
}A;
A *split_csv(char *str)
{
char buffer[128];
int bwq = 0; //begin with quote
int len = 0,i = 0,j = 0;
char ch;
char *result;
A *a;
len = strlen(str);
if(str == NULL || 0 == len ) return NULL; memset(buffer,'/0',sizeof(buffer)); a = (A *)calloc(1,sizeof(A)); for(i=0;i=N) break; ch = str[i]; if(ch == '/"') { if(bwq) { i++; if(i>= len) { result = calloc(1,128); sprintf(result,"%s",buffer); a->p[j++] = result; result = NULL; bzero(buffer,128); bwq=0; } else { ch=str[i]; if (ch == '/"') { sprintf(buffer,"%s%c",buffer,ch); } else if (ch == ',') { result = calloc(1,128); sprintf(result,"%s",buffer); a->p[j++] = result; result = NULL; bzero(buffer,128); bwq=0; } else { return NULL; } } } else if(result == NULL ||0 == strlen(result)) { bwq = 1; } else { return NULL; } } else if(ch == ',') { if(bwq) { sprintf(buffer,"%s%c",buffer,ch); } else { result = calloc(1,128); sprintf(result,"%s",buffer); a->p[j++] = result; result = NULL; bzero(buffer,128); bwq=0; } } else { sprintf(buffer,"%s%c",buffer,ch); } } if(jp[j++] = result; result = NULL; } a->num = j; return a;}void free_a(A *a){ int i = 0; if(NULL == a) return; for(i = 0 ;i< a->num; i++) free(a->p[i]); free(a); return ;}int main(void){ char str[1024]; A *a; int i=0; time_t begin; memset(str,'/0',1024); sprintf(str,"%s","/"e,/"/"eee/",ddd,aaaa,bbb,ccc,111,222,333,4444"); a = split_csv(str); if(a == NULL) { printf("NULL/n"); exit(0); } for(i = 0;i< a->num;i++) printf("%s/n",a->p[i]); free_a(a);}