Як прочитати файл 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); tok = strtok (NULL, ","); row.col2 = tok; tok = strtok (NULL, ","); row.col3 = atof (tok);

Зробіть це для всіх записів у кожному рядку CSV. Функція "strtok" продовжуватиме надавати дані між значеннями коми, поки у неї не закінчаться дані в буфері, після чого вона поверне NULL. Це означатиме, що ви закінчили з рядком.

Увага

Функція "fopen" може повернути NULL, якщо сталася помилка - обов'язково перевірте свій файл перед його використанням. У деяких випадках надані маркери можуть бути не в очікуваному форматі. Обов’язково перевірте свої дані перед сліпим конвертуванням, перевіряючи типові значення помилок (порожній рядок, NULL тощо).