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.