ファイルの入出力はプログラミング言語の本の比較的後ろの方に出てくるが,データを扱う場合データが読めないと始まらない。

Armadilloやmlpackを使ってみたいので,C++でテキストファイルやバイナリファイルを読んでみる。C++のストリームはバイトの列なのでいろいろな複雑なものを読み書きするのに使えるが,読みたいデータは複雑なものではなく同じ型のものが並んでいるだけだ。

テキストファイル

入力ストリーム(if stream)を開いて>>で読めるだけ読む。C++らしいところは,型をパラメタ化しているところ,動的配列std::vectorを使っているところ。

https://gist.github.com/tenomoto/75a8fabb09f010b30d65d4e9a2bcaa8f

バイナリファイル

直接アクセスの場合。ifsをバイナリモード(std::ios::binary)で開いた入力ストリームとする。数値予報モデルの名前ではない。ifs.read()を使って1文字(char)ずつデータを読む。エンディアンをひっくり返すには文字配列の後ろから読めば良い。

https://gist.github.com/tenomoto/2f4d422530397bb736525c9ce0fa5c0f