C:
处理CSV的工作

如何操作:

读取CSV文件

要在C语言中读取CSV文件,我们使用标准文件I/O函数以及字符串处理函数来解析每一行。下面是一个基本示例,展示了如何读取CSV文件并将每行的字段打印到控制台。

#include <stdio.h>
#include <string.h>

int main() {
    FILE *fp = fopen("data.csv", "r");
    if (!fp) {
        printf("Can't open file\n");
        return 1;
    }

    char buf[1024];
    while (fgets(buf, 1024, fp)) {
        char *field = strtok(buf, ",");
        while(field) {
            printf("%s\n", field);
            field = strtok(NULL, ",");
        }
    }

    fclose(fp);
    return 0;
}

示例 data.csv内容:

Name,Age,Occupation
John Doe,29,Software Engineer

示例输出:

Name
Age
Occupation
John Doe
29
Software Engineer

写入CSV文件

同样地,写入一个CSV文件涉及使用fprintf以逗号分隔的格式保存数据。

#include <stdio.h>

int main() {
    FILE *fp = fopen("output.csv", "w");
    if (!fp) {
        printf("Can't open file\n");
        return 1;
    }

    char *headers[] = {"Name", "Age", "Occupation", NULL};
    for (int i = 0; headers[i] != NULL; i++) {
        fprintf(fp, "%s%s", headers[i], (headers[i+1] != NULL) ? "," : "\n");
    }
    fprintf(fp, "%s,%d,%s\n", "Jane Doe", 27, "Data Scientist");

    fclose(fp);
    return 0;
}

示例 output.csv内容:

Name,Age,Occupation
Jane Doe,27,Data Scientist

深入探讨

尽管CSV格式看似简单直接,但它有其细微的差别,比如处理字段内的逗号以及用引号封装字段。上面展示的基本示例没有考虑到这些复杂性,也没有做到错误处理。

历史上,由于C语言的低级特性和缺乏内置的高级抽象来处理此类任务,对CSV的处理大多数是手工进行的。这包括打开文件、读取行、分割字符串以及根据需要转换数据类型等手动管理。

虽然在C语言中直接操纵CSV文件为文件I/O和字符串处理提供了宝贵的学习经验,但一些现代的替代方法承诺高效和较少的错误发生。如libcsvcsv-parser这样的库提供了全面的读写CSV文件的函数,包括对引号字段和自定义分隔符的支持。

另外,当在支持它的生态系统中工作时,与提供高级CSV操作函数的语言或平台集成(比如使用其pandas库的Python)可能是针对需要大量CSV处理的应用程序更为生产的途径。这种跨语言的方法利用了C的性能和系统编程能力,同时利用其他语言在处理特定任务例如CSV处理方面的易用性。