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
 ・
 ・
- 1データずつ読み込む方法
  • c言語のfscanと同じような感じで,1個づつ読み込んでいきます.
サンプルコード
#include<stdio.h>
#include<stdlib.h> #include <fstream.h>

#define N 8740 //データ数

void main()
{
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;
ifstream fin(fname);   //ファイルオープン
  if(!fin){
    cout << "Error.Can't open input data file." << endl;     exit(1);
  }
  while(!fin.eof()){        fin >> y >> m >> d >> d1 >> d2 >> d3;     year[i]=y;
    month[i]=m;
    day[i]=d;
    data1[i]=d1;
    data2[i]=d2;
    data3[i]=d3;
    i++;
  }
  fin.close();
  retrun 0;
}
- 一行丸ごと読み込んでatof()関数でdouble型に変換する方法
  • atof()関数は,char型の数値ををdouble型に変換する.
サンプルコード
#include<stdio.h>
#include<stdlib.h>
#include<fstream.h>

#define N 8740 //データ数

void main(i)
{
     char buf[128];
     double d1,d2,d3;
     double data1[N],data2[N],data3[N];

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

     fstream fin(fname);
     if(!fin){
        cout << "failed at fopen"<< endl;
        exit(1);
     }
     while(fin.getline(buf,128) !fin.eof()){
        d1=atof(&buf[15]);
        d2=atof(&buf[23]);
        d3=atof(&buf[36]);
          data1[i]=d1;
           data2[i]=d2;
           data3[i]=d3;
           i++;

     }
    fin.close();

  return 0;
}

- 関連情報

[前画面に戻る]

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