C++讀取CSV檔案,並將逗號分隔符檔案分割成N個數組
阿新 • • 發佈:2019-01-07
#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;
}
}
#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;
}
}