Не могу разобраться как работать с csv файлами - C (СИ)
Формулировка задачи:
Доброе утро.
Программу пишу на С.
Смотрел такие библиотеки:
- http://sourceforge.net/projects/libcsv/
- http://gerbv.geda-project.org/doxygen/csv_8c-source.html
Решение задачи: «Не могу разобраться как работать с csv файлами»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include "csv.h" /// структура для подсчета полей и записей struct counts { long unsigned fields; long unsigned rows; }; /// обнаружено поле void cb1 (void *s, size_t len, void *data) { ((struct counts *)data)->fields++; ((char*)s)[len]='\0';/// подготовим вывод символов printf("%s\t",(char*)s); } /// обнаружена запись void cb2 (int c, void *data) { ((struct counts *)data)->rows++; printf("\n"); } int main (int argc, char *argv[]) { FILE *fp; struct csv_parser p; char buf[1024]; size_t bytes_read; struct counts c = {0, 0}; if (csv_init(&p, 0) != 0) exit(EXIT_FAILURE); //fp = fopen(argv[1], "rb"); fp = fopen("1.csv", "rb"); if (!fp) exit(EXIT_FAILURE); csv_set_delim(&p, ';');/// установим символ-разделитель while ((bytes_read=fread(buf, 1, 1024, fp)) > 0) if (csv_parse(&p, buf, bytes_read, cb1, cb2, &c) != bytes_read) { fprintf(stderr,"Error while parsing file: %s\n", csv_strerror(csv_error(&p)) ); exit(EXIT_FAILURE); } csv_fini(&p, cb1, cb2, &c); fclose(fp); printf("%lu fields, %lu rows\n", c.fields, c.rows); csv_free(&p); exit(EXIT_SUCCESS); }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы.
- Определяется структура
counts
для подсчета количества полей и записей. - Определяются функции обратного вызова
cb1
иcb2
, которые вызываются при обнаружении поля и записи соответственно. - В функции
main
открывается файл1.csv
для чтения в бинарном режиме. - Устанавливается разделитель по умолчанию - точка с запятой.
- Создается экземпляр
csv_parser
и инициализируется. - В цикле, пока есть данные для чтения, происходит чтение данных из файла и их разбор с помощью
csv_parse
. - Если разбор данных некорректен, выводится сообщение об ошибке и программа завершается с кодом ошибки.
- Закрывается файл и выводится количество полей и записей.
- Все ресурсы освобождаются и программа завершается с кодом успеха.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д