您的位置:首页 > 编程语言 > C语言/C++

C++读取CSV文件,并将逗号分隔符文件分割成N个数组

2012-11-10 23:18 609 查看
#include <stdio.h>

#include <string.h>

// #include <windows.h>

#define MAXLINE 256

struct student

{

char stuName[100];//姓名

char f[11][10];

};

//自定义数据类型

typedef struct student RECORD;

//结构体数组

RECORD rs[10000] = {0};

void spit(int max);

//读取文件

int main()

{

int length,i,j,k;//每行数据长度\结构体下标\成员变量个数\循环变量

char cLineStr[255],cData[80],cTmp[2];//每行文件内容\从文件读取的成员变量内容\每行数据单个字符的值

FILE* fp;

//初始化变量

j = 0 ;

i = 0 ;

memset(cData, 0, sizeof(cData));

memset(cLineStr, 0, sizeof(cLineStr));

memset(&rs, 0, sizeof(RECORD));

fflush(stdin);

//读取文件

fp = fopen("D:\\Exat.csv","r");

if (fp == NULL)

{

return -1;

}

//从文件中一行一行读取数据放入结构体数组

while ((!feof(fp))&&((fgets(cLineStr,MAXLINE,fp)) != NULL))

{

length = strlen(cLineStr);

for (k = 0; k < length; k++)

{

memset(cTmp, 0, sizeof(cTmp));

memcpy(cTmp, &cLineStr[k],1);

//在文件中各个成员中间是用逗号分开的

if (cTmp[0] != '\n')

{

strcat(cData,cTmp);

}

//将从文件中读取出的成员变量内容放入数据文件记录结构体数组中相应的位置

else

{

if (j == 0)

{

strcpy(rs[i].stuName,cData);

}

memset(cData, 0, sizeof(cData));

j++;

if(j == 1)

{

break;

}

}

}//end for

j = 0;

i++;

}//end while

fclose(fp);

//返回数据文件记录结构体数组最大下标

i--;

spit(i);

return i;

}

void spit(int max)

{

int len ;

int m=0,n=0;

int num=0;

for(num=0;num<=max;num++)

{

len = strlen(rs[num].stuName);

for(int i = 0; i<len ;i++)

{

if(rs[num].stuName[i]!=',')

{

rs[num].f[m]
= rs[num].stuName[i];

n++;

}

else

{

m++;

n=0;

}

}

m=0;

n=0;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: