-1

我正在运行一个程序,该程序打开一个 .csv 文件,该文件在每行上包含 3 个不同的(浮点)值。我想将不同变量中的不同值分开。为此,我已经使用了 strtod() 函数,但它仅适用于 Visual Studio 而不适用于 DAVE IDE(基于 Eclipse)。我还测试了以下代码,但完全没有成功(它识别出很多垃圾,没有什么类似于我想要的东西)。

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”字符串的示例如下:

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 个变量)。

提前致谢。

编辑:问题解决了!似乎 DAVE IDE 不喜欢包含带有包含的标题。我不得不在 main.c 的开头写#include。

4

1 回答 1

2

将字符串转换为双精度的标准 C 函数是atof
你在用那个吗?
为什么不?

于 2016-02-29T18:11:59.817 回答