定型 format データファイルの読み込み


Formatの決まったASCIIのデータファイルを読みたいときに,Cはどうも不便である. 一応,fscanf() とかいうライブラリ関数はあるのだが, きちんとデータとデータとの間にスペースが空いていないと うまくデータを読めないようである.地磁気データの場合,データとデータとの間に スペースが空いていないなんてことはよくあることなので,fscanf() は 使えないということになる.

そこで結局,

  1.   データファイルを一行ずつ,文字列として読み込み,
  2.   その文字列から,データの幅に応じた文字数だけ読んで別の文字列にし,
  3.   それを数値に変換する.
というやや面倒なステップを踏むことにした. 例えば,こんな感じである.

	char linebuf[LINELEN+1]; // LINELEN ... データファイルの一行の長さ
	char valbuf[12];
	double data1, data2;

// ファイルから一行読み込んで,linebuf に入れる
	if ( ! input.getline( linebuf, LINELEN+1 ) ){ // うまくデータが読めなかった場合
		if( ! input.eof( ) ){ // EOF だったら return, そうでなければ error
			cerr << "Error.\n";
			exit(1);
		}
		return;
	}
	if( strlen( linebuf ) < LINELEN ){  // 文字列の長さがおかしかったら error
		cerr << "Error.\n";
		exit(1);
	}


// 次に linebuf からデータを読む
	istrstream linebufin( linebuf );

	linebufin.get( valbuf, 6 ); // 一旦,valbuf に読み込んで
	data1 = atof( valbuf ); // 文字列を double型に変換
	linebufin.get( valbuf, 10 );
	data2 = atof( valbuf );

FORTRAN だったら2行で済む話なので,すごく面倒くさく感じる. 早いうちに,このプロシージャは関数にしてしまいたいものだが....




戻る