c语言怎么读取csv文件

在C语言中,读取CSV文件需要使用文件操作函数,CSV文件是一种纯文本文件,可以使用标准的文件操作函数(如fopen、fclose、fgets等)来读取,以下是一个简单的示例,展示了如何使用C语言读取CSV文件。

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] = '