Как прочитать файл .csv в C - PullRequest
0 голосов
/ 06 июля 2018

Я знаю, что есть другие вопросы по этой теме, но я все еще не могу найти решение проблемы.

Я пытаюсь прочитать файл .csv в C, используя функцию fscanf().

Если я открою файл csv в текстовом редакторе, он будет выглядеть так:

578,2.2212e+05,223,0,243,0,0,0.09,0,0,0,3
633,2.2222e+05,223,0,243,0,0,-0.04,0,0,0,3
688,2.2232e+05,223,0,243,0,0,0.07,0,0,0,3
740,2.2242e+05,223,0,243,0,0,0.04,0,0,0,3
793,2.2252e+05,224,0,244,0,0.01,0.16,0,0,0,3
848,2.2262e+05,223,0,717,0.060985,0.02,0.08,0,0,0,4
902,2.2272e+05,223,0,721,0.084618,0.03,0.24,0,0,0,5
955,2.2282e+05,223,0,730,0.12825,0.05,0.34,0,0,0,4

Я только что сообщил о первых нескольких строках, но в них содержится намного больше.

Затем я использовал этот код для чтения файла:

FILE* stream = fopen("./filelog.csv", "r");
if(stream == NULL) {      
       printf("\n file opening failed ");      
       return -1 ;   
} 
int values[8];
int count;
for(count = 0; count < 8; count++) {

    int u = fscanf(stream, "%i", &values[count]);
    printf("%i\n", values[count]);
}

Вывод, который я получаю, следующий:

578
32697
0 
0
1
0
4199901
0

Мы можем видеть, что только первое значениечитается правильно.Как я мог прочитать весь файл и сохранить его в матрице?Я не могу найти решение нигде.Большое спасибо за ваши ответы заранее

1 Ответ

0 голосов
/ 06 июля 2018

Ваша строка формата %i анализирует одно целое число, но следующая вещь после целого числа - запятая, и вы не анализируете это. Вы должны всегда проверять возвращаемое значение, чтобы убедиться, что синтаксический анализ выполнен успешно, прежде чем использовать значение (я).

Вам нужна строка формата, которая соответствует фактическому содержимому файла, например:

if (fscanf(stream, " %d,%f,%d,%d,%d,%d,%d,%f,%d,%d,%d,%d", ...) == 12)
{
}

в коде выше ... означает «поставить указатели на 12 переменных правильных типов, здесь». Пробел в начале строки формата предназначен для того, чтобы помочь «использовать» пробелы (например, перевод строки) в потоке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...