• ベストアンサー

c言語でのfscanfについて

例えば ------------------ ほげほげ1 ほげほげ2 1,2 2,4 3,8 4,16 ------------------ というデータファイルがあったとき3行目からのデータだけを抽出するにはc言語のfscanfでどのように書けばいいでしょうか? 簡単にでかまわないので、どなたか教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4852/10266)
回答No.2

1行目、2行目に空白がないのであれば、 int x,y; fscanf(fp,"%*s %*s %d,%d ",&x,&y); で、xに1、yに2が入ります。

hitomin93
質問者

お礼

ご回答ありがとうございました。 一番シンプルで分かりやすかったので、ベストアンサーにさせていただきます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.3

おっと! 1行目と2行目を読み飛ばす、っていうコードを追加する必要があるぞ!

hitomin93
質問者

お礼

ご回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

こんな感じですね。 char s[256]; fscanf(stream, "%*[^\n]%*c%*[^\n]%*c%255s", s); バッファのサイズは適当に調整してください。

hitomin93
質問者

お礼

ご回答ありがとうございました。 参考にさせていただきます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • C言語のバイナリモードでのfscanf関数の使い方について教えて下さい

    C言語のバイナリモードでのfscanf関数の使い方について教えて下さい。 2*2のint型配列バイナリデータを読み込んで、要素一つ一つを出力したいのですが、 fscanfでの書式指定の仕方がよく分かりません。 fscanf(入力元,"???",&入力先)の???の部分はどう指定すればよいのでしょうか? 下記のようなプログラムを書いたのですが、fscanfでデータを読み込めず、 data=0という出力で無限ループに入ってしまいます。 C言語初心者なので、かなり初歩的な質問かと思いますが、 よろしくお願いします。 -------------------------------------- char *fi; int data; fi = argv[1]; /* 2x2のint型配列バイナリデータを指定 */ input = fopen(fi,"rb"); while(!feof(input)){ fscanf(input,"%d",&data); printf("data=%d\n",data); } ---------------------------------------

  • C言語のテキストファイルの読込み

    必要に迫られてC言語でテキストファイルの読込みを行う プログラムを作成しなければならなくなりました。 whileとfscanfを用いて書式を指定して一行ずつ読込むことができる ということは知っていますが、その際、たとえば読み込むファイルが 20行のテキストファイルだったとして、10行目から読込みを 行いたい場合はどのようにプログラムを書けばいいのでしょうか? なにぶんC言語初心者ですのでよろしくお願いします。

  • C言語初心者の質問 fscanf

    C言語を勉強し始めた初心者です。 後述するプログラムにおいて、カレントディレクトリ上にあるフォルダー(data)内のファイル名をfscanfで読み込んで、標準出力で表示するプログラムを作っています。 コンパイルはうまくいくのですが、プログラムを実行しようとするとプログラムが停止してうまくいきません。 不具合点と改善点をおしえてください。 実行環境?はwindows7,visual studio 2013 です。 #include<stdio.h> int main(void) { int i=0; char s[100][100]; FILE *fp; fp=fopen(".\\data","r"); while((fscanf(fp,"%s",&s[i][100]))!=EOF){ printf("%d:%s\n",i,s[i][100]); i++; } return 0; }

  • C言語での、テキストファイル読み込みについて

    30行×30列の数字が記載されてテキストファイルがあり、 それをC言語で例えばA[ ][ ]といった配列に読み込みたいのですが、 どうすればよいでしょうか? fscanf関数を用いればできないことはないと思うのですが、 30個も書かなければならないのは冗長なので・・・。 なにかよい方法はありますでしょうか?

  • fscanfについて

    ファイルの中身が例えば 600 0.6 3.5 となっているとき, fscanfで読み込むと改行\nを読み込んでくれる場合と読み込まない場合がありませんか? また,これだったら,経験から fscanf(fp,"%d",&a); fscanf(fp,"%f",&b); fscanf(fp,"%c",&c); // \nの読み飛ばし fscanf(fp,"%f",&d); fscanf(fp,"%c",&e); // \nの読み飛ばし でやるとできそうですが,fscanf(fp,"%d",&a);のあとの\nの読み飛ばしがいらないのは何故ですか?

  • C言語初心者過ぎてわからないです

    エクセルのCSVデータなんですが 1行目のデータを 1行目から5行目まで同じデータ 6行目のデータを 6行目から10行目まで同じデータ 10行目のデータを 10行目から15行目まで同じデータ 以上のような作業を繰り返し元のCSVのデータをすべて5行(つまりデータの量は5倍)にしたいのですが C言語でこのような作業を行うファイルをつくるにはC言語ではどのようなプログラムになるでしょうか

  • fscanfについて

    教えてgooを参考にしましたが、fscanfを使ってテキストファイルの任意の行のデータを読み込みたいのですがうまくいきません。 テキストファイルは 0 1 1 0 0 1 0 1 1 0 0 1 0 1 0 0 0 1 0 1 1 といった感じの2進数で3行以上あります。 下に自分が作ったソースがあります。 どこがいけないのか、どういった手法があるのかを詳しく教えていただけたら幸いです。よろしくお願いします。 int gene[10]; FILE* f=fopen("Gene.txt","r"); while(fscanf(f,"%d,%d,%d,%d,%d,%d,%d,%d,%d,%d", &gene[0],&gene[1],&gene[2],&gene3],&gene     [4],&gene[5],&gene[6],&gene[7],&gene       [8],&gene[9])!=EOF) n++; fclose(f);

  • C言語のファイル読み込み

    あるcsvファイルがあり、それは以下のように(規則性のない)波形のデータです。 0.001 0.14 0.002 0.32 0.003 0.46 ・ ・ 2.000 0.22 左側がx軸、右側がy軸で、データはそれぞれ2000個あります。 このデータ(波形)をC言語のプログラムに読み込ませるにはどうしたらいいのでしょうか? #include <stdio.h> int main(void) { double i,j; FILE *file; file = fopen("sample.csv","r"); fscanf(file,"%ls,%ls",&i,&j); fclose(file); printf("i = %d : j = %d\n",i,j); return 0; } とすれば最初の1行目だけは読めますが、それ以降がわかりません。 配列を使えばいいのでしょうか?

  • fscanf()【C言語】

    テキストファイルをうまく読み込んでくれません。 どうかご教示お願いいたします。 環境 Windows7 Borland C++ 5.5.1 for Win32 status.txtの内容 1.50,40.0 1.55,45.0 1.60,50.0 1.65,55.0 1.70,60.0 1.75,65.0 1.80,70.0 1.85,75.0 1.90,80.0 プログラムの内容 #include<stdio.h> #include<stdlib.h> #include<string.h> int main(){ FILE *filepointer; double s[10],w[10]; int i=0,ret; if((filepointer=fopen("status.txt","rt"))==NULL){ printf("file open error!!\n"); exit(1); } printf("%X\n",filepointer); while((ret=fscanf(filepointer,"%f,%f",&s[i],&w[i]))==2){ i++; printf("%d %f %f\n",ret,s[i],w[i]); } fclose(filepointer); return 0; } 出力結果 40E714 2 0.000000 0.000000 2 0.000000 0.000000 2 0.000000 0.000000 2 0.000000 0.000000 2 0.000000 0.000000 2 0.000000 0.000000 2 5.121811144940079976000000000000000000000e+303 0.000000 2 0.000000 0.000000 2 0.000000 0.000000

  • fscanfでループしてしまう。

    大変お世話になっております。 C言語についてお聞きしたいことがあります。 テキストファイルをデータとして読み込み、その数などを計算した結果をテキストファイルにしたいのです。簡略して次のような手順を歩みたいと思います。catalog.txtは数行からなり、各行の34文字目から38文字目までが実数で、これを抽出して各行の実数データを計算したいのですが、作成されたファイルは一行目の計算が無限にループしています。 以下がプログラムです。 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> main(){ FILE *fp, *fp2; char str[1024]; char buf[256]; double i, kekka; if((fp = fopen("catalog.txt", "r")) == NULL){ printf("file open error1\n"); exit(1); } if((fp2 = fopen("kekka.txt", "w")) == NULL){ printf("file open error2\n"); exit(1); } while( fscanf(fp, "%[^\n]", str) != EOF ){ strncpy(buf, &str[33], 5); buf[5] = '\0'; i = atof(buf); kekka = 2 * i; fprintf(fp2, "%lf\n" ,kekka); } } 毎度すいませんがこの解決方法をご教授ください。よろしくお願いします。