• 締切済み

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行目から読み込むように設定したいのですが、やり方がよく分かりません。 どのようにプログラムを書き換えれば良いか、教えていただけると助かります。 よろしくお願いします。

みんなの回答

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.4

以下のようにしてください ------------------------------------ 上部・・・省略・・・ //データの読込み// 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)
回答No.3

fscanf(fp, "%*[^\n] %*[^\n] %*[^\n] "); とか.

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.2

>//データの読込み// のところにでも、 fgets(temp, sizeof(temp), fp); を3つ書く…とか。 # temp[]は十分な大きさが必要でしょう。

  • akito0417
  • ベストアンサー率20% (55/266)
回答No.1

C言語はわからないで、やり方だけ。 おそらく、データ読み込みコメントの下に次の条件を入れればいいと思います。 iが4以上の時だけ処理するようにする 一番手っ取り早い方法だと思いますが、汎用性にかけるプログラムになりますね。 或いは、その3行分のいらないデータを消すとか、 ファイルの中身自体にフォーマットを決め、特定文字(例えば@等)が1文字目に来た場合に処理するとか。 実装方法等はネットで調べてください。 すぐわかると思います。

関連するQ&A

専門家に質問してみよう