Не могу разобраться как работать с 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
. - Если разбор данных некорректен, выводится сообщение об ошибке и программа завершается с кодом ошибки.
- Закрывается файл и выводится количество полей и записей.
- Все ресурсы освобождаются и программа завершается с кодом успеха.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д