2017-04-06 12 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 OS上にある場合、あなたは可能性dirent.hを使用して入力ファイルを格納できる入力ディレクトリ。

ファイルを取得したら、適切な処理を行い、そのファイルから行を読み始めることができます。あなたはcsvファイルを持っているので、strtokを使って行をトークンに分割し、それらに変数をロードすることができます。

0

複数のファイルを読み込まないようにすることは、必要なファイルを開くのではなく、標準入力を使ってデータを読み込むことです。あなたは(つまり、ファイル名)を繰り返し同じことをやっているつもりはなく、異なる入力している場合は、

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]); 
    } 
    } 
関連する問題