2017-04-06 218 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]); 
    } 
    }