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

来源:互联网 发布:如或知而 如的意思 编辑:程序博客网 时间:2024/06/02 17:10
#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][n] = rs[num].stuName[i];
n++;
}
else
{
m++;
n=0;
}
}
m=0;
n=0;
}
}
原创粉丝点击