📅  最后修改于: 2023-12-03 14:39:40.781000             🧑  作者: Mango
在C语言中,我们可以使用文件操作来处理文件,包括读取、写入、打开、关闭等操作。在这里,我们将介绍一个C文件处理的问题,即如何读取CSV文件并将其保存到结构体数组中。
我们假设有一个名为data.csv的CSV文件,其中存储了若干个学生的成绩信息,包括学生姓名、语文、数学、英语三科成绩。现在我们需要读取这个CSV文件,并将每个学生的信息保存到一个结构体中,最后将所有学生的结构体保存到一个结构体数组中,以便于后续处理。
我们可以通过以下步骤来实现读取CSV文件并保存到结构体数组中的功能。
我们先定义一个结构体来保存每个学生的信息。
typedef struct {
char name[20];
int scoreChinese;
int scoreMath;
int scoreEnglish;
} Student;
每个学生的信息包括姓名和三科成绩。
我们可以使用fopen函数打开文件,并使用fgets函数逐行读取文件中的数据。由于每个学生的信息是一行数据,因此我们可以使用逗号作为分隔符,将每行数据拆分成多个字段,并依次将这些字段保存到结构体中。
// 打开文件
FILE* fp = fopen("data.csv", "r");
if (fp == NULL) {
printf("Failed to open file\n");
return;
}
// 初始化结构体数组
Student studentArray[100] = {0};
int numStudent = 0;
// 逐行读取数据
char line[1024];
while (fgets(line, sizeof(line), fp)) {
// 拆分数据
char* pch = strtok(line, ",");
strcpy(studentArray[numStudent].name, pch);
pch = strtok(NULL, ",");
studentArray[numStudent].scoreChinese = atoi(pch);
pch = strtok(NULL, ",");
studentArray[numStudent].scoreMath = atoi(pch);
pch = strtok(NULL, ",");
studentArray[numStudent].scoreEnglish = atoi(pch);
numStudent++;
}
// 关闭文件
fclose(fp);
在上面的代码中,我们使用了strtok函数将一行数据拆分成多个字段,并使用strcpy和atoi函数将这些字段保存到结构体中。注意在使用strtok函数时需要将上一次的地址传入,以便从上一次的位置开始继续拆分。另外,由于CSV文件中的数据都是字符串类型,因此我们需要使用atoi函数将数字字符串转换成整数。
现在我们已经将所有学生的信息存储在结构体数组中了,我们可以使用这些数据进行后续处理。例如,我们可以按照成绩排序,计算平均分等等。
在这篇文章中,我们介绍了如何读取CSV文件并将其保存到结构体数组中。通过将最初的文本数据转换成结构化的数据,我们可以更方便地对数据进行后续处理,从而达到更高的效率。