2016-02-29 13 views
-1

Я запускаю программу, которая открывает CSV-файл, который содержит 3 разных значения (float) в каждой строке. Я хочу разделить разные значения в разных переменных. Для этого я уже использовал функцию strtod(), но работает только на Visual Studio, а не на DAVE IDE (на основе Eclipse). Я также проверил следующий код, но не добился успеха вообще (он распознает много мусора и ничего подобного, чего я хочу).Синхронизация строки с плавающей точкой в ​​C

f_read(&fil, &buff2[0], 25, &br); 
f_close(&fil); 

for (int y=0; y<25; y++){ 
    if ((buff2[y] == '\n') || (buff2[y] == '\r')){ 
     break; 
    } 
    else count++; 
} 

for (int y=0; y<count; y++){ 
    cut[y] = buff2[y]; 
} 
for (int y=count; y<25; y++){ 
    cut[y] = NULL; 
} 


//token = strtok(cut, ";"); 

/* walk through other tokens */ 
/*while(token != NULL) 
{ 
    array[j] = atof(token); 
    token = strtok(NULL, ";"); 
    j++; 
}*/ 


for (int j = 0, ptr = cut; j < 3; ++j, ++ptr) 
{ 
     //array[j] = (float)strtof(ptr, &ptr); 
     array[j] = (double)strtod(ptr, &ptr); 
    } 

Прокомментированные части кода - это другие испытания, которые я сделал, но ни одна из них не работает. И причина, почему я использовал f_read(), потому что я только могу использовать эту библиотеку: http://elm-chan.org/fsw/ff/00index_e.html

Пример «вырезать» строка ниже:

cut[0] char 52 '4' 
cut[1] char 46 '.' 
cut[2] char 50 '2' 
cut[3] char 49 '1' 
cut[4] char 54 '6' 
cut[5] char 59 ';' 
cut[6] char 48 '0' 
cut[7] char 59 ';' 
cut[8] char 49 '1' 
cut[9] char 48 '0' 
cut[10] char 48 '0' 
cut[11] char 0 '\0' 
cut[12] char 0 '\0' 
cut[13] char 0 '\0' 
cut[14] char 0 '\0' 
cut[15] char 0 '\0' 
cut[16] char 0 '\0' 
cut[17] char 0 '\0' 
cut[18] char 0 '\0' 
cut[19] char 0 '\0' 
cut[20] char 0 '\0' 
cut[21] char 0 '\0' 
cut[22] char 0 '\0' 
cut[23] char 0 '\0' 
cut[24] char 0 '\0' 

После 11-го элемента, нет ничего, но это не так, поскольку это всего лишь пример, а некоторые из строк в CSV-файле имеют больше цифр (но они имеют одинаковые 3 переменные).

Заранее спасибо.

EDIT: проблема решена! Кажется, что DAVE IDE не любит включать заголовок с включенными. Мне пришлось писать #include в начале main.c.

+2

huh? Пожалуйста, покажите полный, действительный пример. – OldProgrammer

+1

Это не похоже на файл .csv ... Опубликуйте содержимое файла, кажется, что вы его плохо прочитали или плохо прочитали прочитанную часть. Ваша C-строка заканчивается в позиции 14 (символ NUL). Опубликуйте полный функциональный код, который можно протестировать. –

+0

Опубликовать объявление 'cut []' и как оно было заполнено. – chux

ответ

2

Стандартная функция C для преобразования строки в двойную - atof.
Вы используете это?
Почему бы и нет?

+0

Я также пробовал это и получил те же самые дерьмовые значения: 446676608, 0, 0 И они должны be: 4.216, 0, 100 – canibalimao