在C语言中,读取CSV文件需要使用文件操作函数,CSV文件是一种纯文本文件,可以使用标准的文件操作函数(如fopen、fclose、fgets等)来读取,以下是一个简单的示例,展示了如何使用C语言读取CSV文件。
1、我们需要包含必要的头文件,在这个例子中,我们需要包含stdio.h
,它是C语言的标准输入输出库。
#include <stdio.h>
2、接下来,我们需要定义一个结构体,用于存储CSV文件中的数据,在这个例子中,我们假设CSV文件中的每一行都包含两个字段,分别是姓名和年龄,我们可以定义一个名为Person
的结构体,包含两个char
类型的数组,分别用于存储姓名和年龄。
typedef struct { char name[50]; int age; } Person;
3、现在,我们可以编写一个函数,用于从CSV文件中读取数据并将其存储在Person
结构体数组中,这个函数的原型如下:
void read_csv(const char *filename, Person *persons, int max_persons);
filename
是CSV文件的名称,persons
是一个指向Person
结构体数组的指针,max_persons
是数组的最大容量。
4、接下来,我们实现这个函数,我们需要打开CSV文件,我们可以使用fopen
函数来实现这一点,如果文件打开成功,我们将返回一个非空指针;否则,我们将返回NULL
。
FILE *file = fopen(filename, "r"); if (file == NULL) { printf("无法打开文件: %s ", filename); return; }
5、现在,我们可以逐行读取CSV文件,我们可以使用fgets
函数来实现这一点,对于每一行,我们需要检查它是否为空行(即只包含换行符),如果是空行,我们可以跳过它;否则,我们需要解析这一行,提取姓名和年龄,并将它们存储在Person
结构体数组中,为了简化解析过程,我们假设CSV文件中的每一行都遵循以下格式:
姓名,年龄
张三,25 李四,30
我们可以使用strtok
函数来解析每一行,我们需要将这一行复制到一个临时缓冲区中,我们可以使用strtok
函数来分割这一行,提取姓名和年龄,我们需要将提取到的姓名和年龄存储在Person
结构体数组中,注意,我们需要确保不会超过数组的最大容量。
char line[1024]; while (fgets(line, sizeof(line), file)) { if (line[0] == ' ') { continue; // 空行,跳过 } // 解析姓名和年龄 Person person; char *token = strtok(line, ","); strncpy(person.name, token, sizeof(person.name) 1); person.name[sizeof(person.name) 1] = '