Я пытаюсь прочитать файл CSV, где у меня есть только двойные значения, разделенные запятой.Я использую функцию char *fgets(char *str, int n, FILE *stream)
для чтения строк.В коде, чтобы завершить цикл do-while, я использую метод getc()
, чтобы прочитать следующий символ, чтобы узнать, прочитал ли я конец файла.Проблема в том, что метод getc()
читает первый символ из следующей строки, поэтому я теряю данные (так как первое число в следующей строке теряет одну цифру).Как вы можете видеть, кроме первой строки, все записи первого столбца потеряли свои первые символы.
Что я должен использовать для управления циклом while?Или есть другой метод, который я должен использовать для чтения данных из файлов CSV?Большое спасибо
Данные из my_file.csv:
3,0000,4,0000,5,0000,6,0000,7,0000
6,0000,5,0000,4,0000,3,0000,2,0000
9,0000,6,0000,3,0000,0,0000, -3,0000
12,0000,7,0000,2,0000, -3,0000, -8,0000
15,0000,8,0000,1,0000, -6,0000, -13,0000
18,0000,9,0000,0,0000, -9,0000, -18,0000
Фактический вывод:
[введите описание изображения здесь] [1]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void getData(char *buff);
int main() {
char folder_addr[] = "C:\\my_file.csv";
FILE *fp = fopen(folder_addr, "r");
do {
char buff[1024];
fgets(buff, 1024, (FILE*)fp);
printf(buff);
getData(buff);
} while ((getc(fp)) != EOF);
return 0;
};
void getData(char *buff){
char *token = strtok(buff, ",");
//printf("First value: %s\n", token);
while (token != NULL) {
//printf("First value: %s\n", token);
token = strtok(NULL, ",");
}
}
[1]: https://i.stack.imgur.com/fQzw1.jpg