C:
Работа с CSV

Как:

Чтение файлов CSV

Для чтения файла CSV на языке C мы используем стандартные функции ввода/вывода файлов вместе с функциями манипуляции строками для разбора каждой строки. Ниже приведен базовый пример чтения файла CSV и вывода полей каждой строки в консоль.

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

int main() {
    FILE *fp = fopen("data.csv", "r");
    if (!fp) {
        printf("Не удалось открыть файл\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("Не удалось открыть файл\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, хотя и кажется простым, имеет свои нюансы, такие как обработка запятых внутри полей и заключение полей в кавычки. Представленные базовые примеры не учитывают такие сложности, как и не обрабатывают потенциальные ошибки надёжно.

Исторически обработка CSV в C в основном была ручной из-за низкоуровневого характера языка и отсутствия встроенных абстракций высокого уровня для таких задач. Это ручное управление включает в себя открытие файлов, чтение строк, разделение строк и преобразование типов данных по мере необходимости.

Хотя прямая манипуляция файлами CSV на C предоставляет ценный опыт работы с файлами ввода/вывода и обработкой строк, существуют современные альтернативы, обещающие эффективность и менее подверженные ошибкам процессы. Библиотеки, такие как libcsv и csv-parser, предлагают комплексные функции для чтения и записи файлов CSV, включая поддержку заключенных в кавычки полей и настраиваемые разделители.

Как альтернатива, при работе в экосистемах, которые это поддерживают, интеграция с языками или платформами, предоставляющими функции манипуляции с CSV высокого уровня (например, Python со своей библиотекой pandas), может быть более продуктивным путем для приложений, требующих интенсивной обработки CSV. Этот межъязыковой подход использует производительность C и возможности системного программирования, в то же время применяя простоту использования других языков для конкретных задач, таких как обработка CSV.