BONO's pageプログラム覚書

ファイルの読込 C編 [2004年1月]

- テキストデータファイルを読み込む場合
  • ファイル名:data96.dat とする以下のようなファイルの中にある後ろ3つのデータを読み込む場合.
 1996   1  1    0.0000    0.5701    0.8815
 1996   1  2    0.0000    0.6925    0.4674
 1996   1  3    0.0000    0.7023    0.6405
 1996   1  4    0.0000    0.7223    0.6748
 1996   1  5    0.0000    0.7219    0.6502
 1996   1  6    0.0000    0.7123    0.7108
 1996   1  7    0.0000    0.7028    0.4755
 1996   1  8  10.5000    0.8519    0.9824
 1996   1  9    1.0000    0.7590    0.8842
 1996   1 10    0.5000    0.7540    0.6873
 ・
 ・

- fscanf関数で読み込む方法
サンプルコード
#include<stdio.h>
#include<stdlib.h> #include <fstream.h>

#define N 8740 //データ数

void main()
{   FILE *fp;
    char fname[]="d:\\data\\data96.dat";  //絶対パス
    int y,m,d;      //ダミー変数
    double d1,d2,d3; //ダミー変数
    int year[N],month[N],day[N]
    double data1[N],data2[N],data3[N];
    int i=0;
    if((fp = fopen(fname,"r")) == NULL)
    {
      printf("Error.Can't open input data file.");
      exit(1);
    }
    while(fscanf(fp,"%i%i%i%f%f%f",&y,&m,&d,&d1,&d2,&d3)  !=  EOF)
    {
      year[i]=y;
      month[i]=m;
      day[i]=d;
      data1[i]=d1;
      data2[i]=d2;
      data3[i]=d3;
      i=i+1;
  }
  fclose(fp);
  retrun 0;
}

- 一行丸ごと読み込んでatof()関数でdouble型に変換する方法
  • atof()関数は,char型の数値ををdouble型に変換する.
サンプルコード
#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>

int main(int argc, char* argv[])
{
    FILE* fpi;
    char buf[128];
    double d1,d2,d3;

    char fname[]="d:\\data\\data96.dat";

    fpi=fopen(fname,"r");
    if(fpi == NULL){
      printf("failed at fopen\n");
      exit(1);
    }
    while(fgets(buf,128,fpi) != NULL){
      d1=atof(&buf[15]);
      d2=atof(&buf[23]);
      d3=atof(&buf[36]);
    }
    fclose(fpi);

    return 0;
}

- 関連情報

[前画面に戻る]

Copyright(C)1998 Shinichi Takeshita.All Rights Reserved.