2017-04-06 124 views
0

我需要读取CSV表并将其值用于函数,但scanf()函数只读取文件的第一列。我还需要代码能够读取多个文件,而不允许指定文件的名称。这样做的正确方法是什么?C:读取多个CSV文件

例子:

CSV文件行:114 -0.44 -0.15385 -0.76293

代码输出:114 0.00 0.00 0.00

我的代码:

#include <stdio.h> 
#include <tgmath.h> 
#include <stdlib.h> 

int main(){ 
    long sec; 
    long wait = 0; 
    int fall = 0; 
    double x; 
    double y; 
    double z; 
    double mag = 0.0; 
    long i =0; 

    while(1){ 
     scanf("%ld %lf %lf %lf", &sec, &x, &y, &z); 
     mag = sqrt(pow(x,2)+pow(y,2)+pow(z,2)); 
     break; 
    } 

    printf("%ld %lf %lf %lf\n", sec, x, y, z); 

    output1(wait); 
    output2(fall); 

    return 0; 
} 
+0

https://ideone.com/wjutAL只是试过你的代码,它按预期工作。 –

+0

请给出一个真实的[mcve](这里是output1和output2)以及实际的输入和输出。正如Ajay所说,这段代码可以读取和打印示例输入! –

+0

不要太挑剔,但CSV意味着逗号分隔值,您的示例代码不会用逗号分隔值,而是用空格分隔值。 – Neil

回答

0

如果您使用的是Windows操作系统,你可以使用dirent.h并创建一个输入目录,您可以在其中存储输入文件。

一旦你有了文件,你可以做一个适当的处理,并开始从它读取的线。由于您有一个csv文件,您可以使用strtok将行分成标记,然后使用它们加载变量。

0

阻止你阅读多个文件的事情是,你使用stdin来读取数据而不是打开你想要的文件?如果你要反复做同样的事情,但不同的输入(即文件名),你应该创建一个函数,沿着线的东西...

void myfunc(char *filename) 
    { 
    FILE *thefile; 
    double x,y,z; 
    long sec; 

    thefile=fopen(filename,"r"); 
    if(thefile) 
    { 
    if(fscanf(thefile,"%ld %lf %lf %lf", &sec, &x, &y, &z)==4) 
     { 
     /* do stuff */ 
     } 
    fclose(thefile); 
    } 
    } 

,然后在你的主,你可以使用命令行参数指定文件名如此

int main(int argc,char *argv[]) 
    { 
    int i; 
    for(i=1;i<argc;i++) 
    { 
    myfunc(argv[i]); 
    } 
    }