📜  c 读取 csv - C 编程语言(1)

📅  最后修改于: 2023-12-03 15:13:48.452000             🧑  作者: Mango

C 读取 CSV - C 编程语言

简介

CSV(Comma Separated Values)意为逗号分隔值,是一种常用的文本格式,用于将一组具有相同属性的数据连接在一起。在C编程中,读取CSV文件经常是必需的。在本文中,我们将介绍如何在C中读取CSV文件,并将其转换为适当的数据类型。

读取CSV文件

在C中,我们可以使用标准库提供的函数fopen和fscanf来读取CSV文件。其中,fopen函数用于打开文件,并将文件指针指向文件开头,而fscanf函数用于从文件中读取具有格式的数据。

下面是读取CSV文件的示例代码:

#include <stdio.h>

int main() {
    FILE *fp;
    char filename[] = "data.csv";
    char line[100];
    int id;
    char name[20];
    float salary;

    fp = fopen(filename, "r");

    while (fgets(line, sizeof(line), fp)) {
        sscanf(line, "%d,%[^,],%f", &id, name, &salary);
        printf("%d %s %.2f\n", id, name, salary);
    }

    fclose(fp);
    return 0;
}

代码说明:

  • 打开名为 data.csv 的文件,并将文件指针fp指向文件开头。
  • fgets函数用于从文件中读取一行数据,并将其存储在line数组中,同时也包含了行末的换行符。
  • sscanf函数用于将line数组中的数据转换为id、name和salary,它使用了格式化字符串"%d,%[^,],%f",%d表示整数,%[^,]表示除逗号以外的非空白字符序列(应用到name变量上),%f表示浮点数。
  • 最后打印读取的数据,并关闭文件。
读取CSV文件中的日期

在CSV文件中,日期通常以yyyy-mm-dd的格式存储。如果我们需要在C中将其读入,并进行日期运算,那么就需要将其转换为time_t类型,这需要使用C标准库中的strptime函数。

下面是读取CSV文件中日期的示例代码:

#include <stdio.h>
#include <time.h>

int main() {
    FILE *fp;
    char filename[] = "data.csv";
    char line[100];
    int id;
    char name[20];
    float salary;
    char date_str[11];
    struct tm date;
    time_t time;

    fp = fopen(filename, "r");

    while (fgets(line, sizeof(line), fp)) {
        sscanf(line, "%d,%[^,],%f,%[^,]", &id, name, &salary, date_str);
        strptime(date_str, "%Y-%m-%d", &date);
        time = mktime(&date);
        printf("%d %s %.2f %s", id, name, salary, ctime(&time));
    }

    fclose(fp);
    return 0;
}

代码说明:

  • 和之前相同,我们打开文件,读取文件中的一行数据,并将其存储在line数组中。
  • 与之前不同的是,我们将date_str存储为字符串,然后使用strptime函数将其转换为struct tm类型的日期,%Y-%m-%d表示日期格式。
  • 接下来,我们使用mktime函数将日期转换为time_t类型,以便进行日期运算。
  • 最后,我们打印读取的数据,包括日期,最后关闭文件。
总结

在本文中,我们介绍了如何使用C读取CSV文件,并将其转换为适当的数据类型。我们还介绍了如何读取CSV文件中的日期,并将其转换为time_t类型。这些知识对于处理数据文件,特别是需要进行日期计算的数据文件非常有用。