- ベストアンサー
C言語のプログラムについて質問です。
C言語初心者で困っています。 テキストデータの上から3行分を飛ばして、4行目から読み込むようにするにはどのようなプログラムを書けば良いでしょうか? ちなみにデータは2列、100003行あります。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No1です。 これだとエラーになりません? 最初のforがファイルが複数という意味のループであれば //ループカウンタ int idt = 0; //読込みファイル名の設定// 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); } else { //データの読込み// //for(i=0;i<SN;i++) SNの用途が分からないのでwhileに置き換え //kari[0]とkari[1]は1行目の中の文字列2つ(データ2列)なので行ではない while(( ret = fscanf(fp,"%lf,%lf\n",&kari[0],&kari[1])) != EOF) { // 4行目以降を読み込む if(idt > 2) { ch1[i]=kari[0]; //データ列1つ目 ch2[i]=kari[1]; //データ列2つ目 } //ループカウンタをインクリメント idt++; } //ファイルクローズ fclose(fp); } } ※インデントは全角スペース 特に見直しはしてないので、何かエラーが出たらごめんなさい。 とりあえず複数ファイルではなく1ファイルをループしてデータを取ってくる処理を作ってみるのがいいと思います。
その他の回答 (3)
- shincha119
- ベストアンサー率42% (95/226)
No3を書いたのはNo1さんではんくNo2でした。 あまり気にしないでください(苦笑)
- shincha119
- ベストアンサー率42% (95/226)
ファイルの読み込み方法はfgetsの他にもあるので、 とりあえずの一例として考えてください //ループカウンタ i=0; fp = fopen(fname , "r"); while (fgets(buf,256,fp) != NULL){ //0,1,2の場合は飛ばす(3行分) if(i<3){ i++; continue; } // // 読み込み後の処理 // } fclose(fp); ※スペース部分は全角
- Wr5
- ベストアンサー率53% (2173/4061)
>テキストデータの上から3行分を飛ばして、4行目から読み込むようにするにはどのようなプログラムを書けば良いでしょうか? 通常と同じ手順で3行読み込んで、そのデータは使わない。
補足
自分のプログラムにどう当てはめて良いか、よく分からないです。 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); ---------------------------------------------- しかし、テキストファイルの初めの3行には不必要な文字列が存在するため、4行目から読み込むように設定したいのですが、やり方がよく分かりません。 どのようにプログラムを書き換えれば良いか、教えていただけると助かります。