Не могу разобраться как работать с csv файлами - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброе утро. Программу пишу на С. Смотрел такие библиотеки:
  • http://sourceforge.net/projects/libcsv/
  • http://gerbv.geda-project.org/doxygen/csv_8c-source.html
Понять как извлекать данные из csv при помощи этих библиотек не смог понять. Те примеры, которые нашел, мне ни о чем не говорят.

Решение задачи: «Не могу разобраться как работать с 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);
}

Объяснение кода листинга программы

  1. Включаются необходимые заголовочные файлы.
  2. Определяется структура counts для подсчета количества полей и записей.
  3. Определяются функции обратного вызова cb1 и cb2, которые вызываются при обнаружении поля и записи соответственно.
  4. В функции main открывается файл 1.csv для чтения в бинарном режиме.
  5. Устанавливается разделитель по умолчанию - точка с запятой.
  6. Создается экземпляр csv_parser и инициализируется.
  7. В цикле, пока есть данные для чтения, происходит чтение данных из файла и их разбор с помощью csv_parse.
  8. Если разбор данных некорректен, выводится сообщение об ошибке и программа завершается с кодом ошибки.
  9. Закрывается файл и выводится количество полей и записей.
  10. Все ресурсы освобождаются и программа завершается с кодом успеха.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.2 из 5
Похожие ответы