Как читать CSV-файл на C

click fraud protection

Обратитесь к документации программы, предоставляющей файл CSV. Определите количество полей в каждой строке, а также формат каждого поля. Например, если программа предоставляет CSV-файл со следующими данными: 1, «test», 34,5, вы должны отметить три поля: одно целое число, одну строку и одно число с плавающей запятой.

Создайте структуру, содержащую элемент данных для каждого поля, указанного в CSV. Используя приведенный пример строки 1, "test", 34.5, вам потребуется следующая структура: struct data {int col1; char * col2; float col3; };

Создайте в своей программе метод, который будет обрабатывать чтение файла CSV. Он должен быть доступен для остальной части вашей программы и, вероятно, должен работать с общими структурами данных, чтобы другие методы могли получить доступ к данным, которые были прочитаны. Передайте параметр по ссылке, чтобы исключить необходимость в возвращаемом значении. Примером прототипа функции может быть: void ParseCSV (char * filename, data & input);

Создайте файловый объект, который будет считывать данные, используя следующий код: FILE * pInput;

Создайте буфер символов, достаточно большой, чтобы хранить по одной строке файла за раз. Из-за ограничений языка наиболее простой способ сделать это - объявить массив символов достаточно большого размера, например: #define BUFFER_SIZE 1024

Откройте файл с помощью следующего кода и назначьте его вашему ранее созданному объекту FILE: pInput = fopen ("filename," "r")

fgets (buf, sizeof (buf), pInput)

Разберите CSV с помощью функции strtok. Создайте новую символьную строку, указывающую на токены, и инициализируйте ее данными из строки, прочитанной выше: char * tok = strtok (buf, ",")

Преобразуйте полученный токен в соответствующие данные. Используя строку примера: 1, «test», 3.45 преобразуйте данные, содержащиеся в «tok», в целое число, используя следующий код: row.col1 = atoi (tok);

Для последующих чтений из той же строки передайте «strtok» параметр NULL вместо строки буфера, которую вы читали ранее: tok = strtok (NULL, «,») Затем преобразуйте токен в соответствующий тип данных. Используя пример строки 1, "test", 3.45. Код синтаксического анализа для одной строки будет выглядеть так: char * tok = strtok (buf, ","); row.col1 = atoi (ток); tok = strtok (NULL, ","); row.col2 = ток; tok = strtok (NULL, ","); row.col3 = atof (ток);

Сделайте это для всех записей в каждой строке CSV. Функция strtok будет продолжать предоставлять данные между значениями запятых, пока не закончатся данные в буфере, после чего она вернет NULL. Это будет означать, что вы закончили с линией.

Предупреждение

Функция fopen может вернуть NULL, если произошла ошибка - обязательно проверьте ваш файл перед его использованием. В некоторых случаях предоставленные токены могут не соответствовать ожидаемому формату. Обязательно изучите свои данные перед слепым преобразованием, сравнив их с общими значениями ошибок (пустая строка, NULL и т. Д.).