• ベストアンサー

C言語でのデータの読込み

C言語である処理の方法を教えて欲しいのです。 例えばあるファイルに、20*30(縦*横)のデータが格納されていてこれらをすべて読み込む時、 while(fscanf(fp,"%lf%lf%lf・・・\n\n\n・・・",&tmp1,&tmp2,&tmp3・・・)!=EOF){ data[i][j]=tmp; j++; } このように記述すると%lfというのを30個書かなくてはいけなくなるので困っています。 他の方法が思いつきません。 もっと簡単(きれい)に読込みのできる記述を教えてください。 宜しくお願いします。

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

  • ベストアンサー
  • mneko
  • ベストアンサー率33% (46/139)
回答No.1

データの区切りはどのようになってますか? 半角空白での区切りとして、 i=j=0; while(1) { for(j=0;j<30;j++) { fscanf(fp,"%lf",&temp[i]j]); } if( feof(fp)) break; i++; } こんな感じでどうでしょうか?

pic100
質問者

お礼

ただ、\nがいらなかったンですね。 もっと勉強しなくてはいけませんね。 ありがとうございました。

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

関連するQ&A

  • C言語で複数列のデータを1列のみ読み込みたい

    行m列の任意のデータの処理を行うプログラムで, 列ごとの統計を行うためにm列目のデータを取り出したいのですが,うまくいきません. どのようなコードを書けばいいでしょうか? 自分で作ってみたのは以下のようなプログラムです(ファイルを開いて→m列目の読み込みの部分) EOFを使っているためか,行数のiには全データ数が入ってしまいます. void main (void) { FILE* fp; int i, j; i=0, j=0; char FilePath[500]; char Folder[100]; char File[50]; printf("Folder Name:"); scanf("%s",&Folder); printf("File Name:"); scanf("%s",&File); sprintf(FilePath,"%s/%s",Folder,File); if(( fp = fopen (FilePath,"r")) == NULL){ printf("cannot open '%s'\n", FilePath); exit(1); } //ここまではうまく動きます while (fscanf(fp, "%lf", &A[i][0]) != EOF{ i++; } while (fscanf(fp, "%lf", &A[0][j]) != EOF){ j++; } printf("A[%d][%d]", i, j); int n, m;              //n,mはこの後for文で使いたいので登場してもらいました printf("input 'n':"); scanf("%d", &n); printf("input 'm':"); scanf("%d", &m); }

  • C言語のプログラミングで困っています

    C言語を勉強しています。まだまだ初心者で分からないことだらけなのですが、今回はファイル入出力の部分が分からず苦戦しています。 『100個の実数が入った2つのテキストファイルから数値を読み込み、  絶対値を求めるなどの計算をする』プログラムを作成しているのですが、 コンパイルし実行すると強制終了してしまいます。 プログラムは、 void main(void) { FILE *fp; double c[50000];   double d[50000];   double e[50000]; int n = 0;   int m = 0;   int i = 0;   char fname[80];   char fname2[80]; printf("ファイル名 : ");    gets(fname); if((fp = fopen(fname, "r")) == NULL){ printf("ファイルがオープンできません\n"); exit(1); } printf("\n"); while (fscanf(fp,"%lf",&c[i])!=EOF){ printf("%3d : %3lf",++n,c[i]); printf("\n"); i++; } printf("\n"); i=0; n=0; printf("ファイル名 : ");    gets(fname2); if((fp = fopen(fname2, "r")) == NULL){ printf("ファイルがオープンできません\n"); exit(1); } printf("\n"); while (fscanf(fp,"%lf",&d[i])!=EOF){ printf("%3d : %3lf",++n,d[i]); printf("\n"); i++; } …(以下計算) のようになっています。 整数のデータで計算を行うと、正常に動くのですが…。 コンパイルしてもエラーが出ないので、どこが悪いのかわからず困っています。 どなたか教えていただけないでしょうか。お願いしますm(_ _)m

  • ネットワーク型データベースの構築

    C言語でネットワーク型のデータベースの構築を行っています。 そこで、住所録のデータベースなどで、『氏名 住所 電話番号』をfscanfで読み込みこんでみたのですが巧くいきません。 以下のような感じで作ってみたのですが・・・ fp=fopen("jyusyo.database","r"); fscanf(fp,%d",&num_data); for(i=0;i<num_data;i++){ j=0; while(1){ fscanf(fp,"%c",&tmp[i][j]); if(strcmp(&tmp[i][j],"\n"==0){ break; }else{ j++; } printf("%s\n",tmp[i]); } 他のやり方でもいい方法があれば教えてください!! よろしくお願い致します。

  • C言語の質問です。

    前にも質問したのですがなかなかうまくいかないのでよろしくお願いします。 データの書いてあるファイルを読み込んで処理するプログラムを書きたいと考えています。 読み込むデータ 0.012500 0.499167 1.382500 1.534444 2.489167 3.635000 3.775000 5.407500 5.705000 5.916667 6.115833 6.295278 6.825278 7.079722 . . . . この様な数値のかいてあるデータを使って0.5ずつに区切ってその中に何個データがあるか数えたいと考えています。(データは1万5千個以上あります) 例えば上のデータで考えると 0~0.5の範囲のデータは2個 0.5~1の範囲のデータは0個 1~1.5の範囲のデータは1個 1.5~2の範囲のデータは1個 2~2.5の範囲のデータは0個。。。 という風に数えるプログラムにしたいです。 僕が分からないところはどのように場合分けしていくか。。。です。 #include<stdio.h> //#include<process.h> int main(void) { FILE *fp; double n; int cnt,i,Cnt; fp=fopen("1.dat","r"); if(fp==NULL) { printf("file open error!!\n"); exit(1); } i=0; cnt=0; Cnt=0; while(fscanf(fp,"%lf\n",&n)!=EOF){ if(i<=n<(i+0.5)){ cnt++; printf("%lf %d\n",i,cnt); } else if((i+0.5)<=n<(i+1)){ Cnt++; printf("%lf %d\n",i,Cnt); } else{ i++; } } fclose(fp); return 0; } 僕の考えはデータを読み込む 変数 i を使って if文で i <= n <i+0.5の範囲のときはcntを足していく     i+0.5<= n <i+1の範囲のときはCntを足していく それ以外のときは i を+1して同じことを繰り返す というようなやり方を考えました。 しかしうまくいきませんでした。 どのようにすればよいでしょうか。 よろしくお願いします。

  • C言語 文字列格納

    テキストファイルから整数データ又は文字列を読み込んで配列に格納する動作についての質問です。 テキストファイルが1行区切りの整数型なら1次元配列で for(i = 0; i < maxSize; i++) { fscanf(fp,"%d", &data[i]); } テキストファイルが1行区切りの文字列なら2次元配列で for(i = 0; i < MAXSIZE; i++) { if (fscanf(fp,"%s", &data[i][300]) == EOF) break; } for(j = 0; j < i; j++) printf("%s\n", data[j]); みたいな具合に格納できたんですが、 テキストファイルが1行区切りのデータではなく、空白文字区切りの文字データだった場合、それぞれどのようにして配列に格納すればいいかがわかりません。 イメージとしては、1文字目から見ていって空白が出ればそこで切って格納していくというかんじなのですが・・・ 質問の内容がわかりにくいかもしれませんが、是非教えてください。お願いします。

  • ファイル入力

    下記のようにテキストファイルをオープンして、fscanf文でデータを入力していくのですが、 ファイルの数が1000個ほどありまして、 ファイル名が abc001.txt abc002.txt abc003.txt ・ ・ abc100.txt のように一部だけ変わっているだけなんです。 すべてのファイル名を何回も記述するのはめんどうなので、簡単に出来る方法がありましたら、教えて欲しいです。 if((fp = fopen("abc001.txt","r"))!=NULL) { while(fscanf(fp,"%lf,%lf\n",&index[n][0],&index[n][1])!=EOF) ・ ・ ・ ・

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

    ファイルの読み込みについて質問です。 for ( j=0; j<loop; j++ ){ fscanf ( fp, "%lf", &tmp ); if( (double)tmp != 0.0 ){ AVE[j] = (float)tmp; } } 読み込みファイル 0.000000 0.000000 -11.692600 -34.866700 0.056800 0.091400 0.009800 -0.111000 -0.208900 -0.222600 -0.055100 0.000000 0.072300 0.006500 -0.112500 -0.106500 0.079800 -0.098200 0.000000 0.000000 1行目と5行目の0.0を除いた数値を読み込みたいのですが、上記のコード の場合、3行目の"0.0"もスキップされます。 3行目の"0.0"と他の"0.0"以外の数値を読み込みたい場合、 どのようなコードを書けば実現できませすでしょうか? 初心者なので、できれば具体的なコードでお願いします。 行列数は、変化します。 宜しくお願いします。

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

  • C言語でファイルから読み込みができません。

    以下のプログラムを実行すると よくわからない値が返ってきます。 なぜでしょうか?教えてください。 #include <stdio.h> void main () { FILE *fp; double a, b; int count=0; fp = fopen("test.xls", "r"); while(1) { fscanf(fp, "%lf %lf\n", &a, &b); printf("%f, %f\n", a, b); count++; if(count==10)break; } fclose(fp); } test.xlsの中身は 1.0 2.0 3.0 4.0 5.0 6.0   :   :   :   : です。 よろしくお願いします。

  • 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; }