- 締切済み
C言語のプログラムに関する質問です。
C言語初心者で困っています。 SNをサンプリング数、FNをファイル数として、テキストファイルの1行目のデータ(kari[0])と2行目のデータ(kari[1])をそれぞれCH1、CH2に読み込むような以下のようなプログラムがあります。 ------------------------------------------ //読込みファイル名の設定// for(j=1;j<FN+1;j++){ sprintf(file_name,"%s%d%s",file,j,".txt"); printf("%d%s\n",j,file_name); if ((fp = fopen(file_name, "r")) == NULL){ printf("Error: Can't open file; %s\n", file_name); } //データの読込み// for(i=0;i<SN;i++){ fscanf(fp,"%lf,%lf\n",&kari[0],&kari[1]); ch1[i]=kari[0]; ch2[i]=kari[1]; } fclose(fp); ・ ・ ・ fclose(fp); } ---------------------------------------------- しかし、テキストファイルの初めの3行には不必要な文字列が存在するため、4行目から読み込むように設定したいのですが、やり方がよく分かりません。 どのようにプログラムを書き換えれば良いか、教えていただけると助かります。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- tatsu99
- ベストアンサー率52% (391/751)
以下のようにしてください ------------------------------------ 上部・・・省略・・・ //データの読込み// fscanf(fp,"%lf,%lf\n",&kari[0],&kari[1]); ・・ここへ(1)と同じ内容を記述 fscanf(fp,"%lf,%lf\n",&kari[0],&kari[1]); ・・同上 fscanf(fp,"%lf,%lf\n",&kari[0],&kari[1]); ・・同上 for(i=0;i<SN;i++){ fscanf(fp,"%lf,%lf\n",&kari[0],&kari[1]); ・・(1) ch1[i]=kari[0]; ch2[i]=kari[1]; } 以下・・・省略・・・ -------------------------------------- fscanf(fp,"%lf,%lf\n",&kari[0],&kari[1]);は 1行分を読み込み、kari[0]とkari[1]にその内容をセットします。 従って、それを最初に3回行なっておくと、3行分を空読みしたことになります。 データが3行以下の場合は、きちんと動作しませんが、今回はそのことは考慮しなくて良いはずです。
- Tacosan
- ベストアンサー率23% (3656/15482)
fscanf(fp, "%*[^\n] %*[^\n] %*[^\n] "); とか.
- Wr5
- ベストアンサー率53% (2173/4061)
>//データの読込み// のところにでも、 fgets(temp, sizeof(temp), fp); を3つ書く…とか。 # temp[]は十分な大きさが必要でしょう。
- akito0417
- ベストアンサー率20% (55/266)
C言語はわからないで、やり方だけ。 おそらく、データ読み込みコメントの下に次の条件を入れればいいと思います。 iが4以上の時だけ処理するようにする 一番手っ取り早い方法だと思いますが、汎用性にかけるプログラムになりますね。 或いは、その3行分のいらないデータを消すとか、 ファイルの中身自体にフォーマットを決め、特定文字(例えば@等)が1文字目に来た場合に処理するとか。 実装方法等はネットで調べてください。 すぐわかると思います。