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.