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.