私はC++で解析する必要がある〜3MBのテキストファイルがいくつかあります。3MBのテキストファイルを効率的に読み込みます。構文解析
テキストファイルは、この(1024x786
)のようになります。
12,23 45,78 90,12 34,56 78,90 ...
12,23 45,78 90,12 34,56 78,90 ...
12,23 45,78 90,12 34,56 78,90 ...
12,23 45,78 90,12 34,56 78,90 ...
12,23 45,78 90,12 34,56 78,90 ...
手段Tab
で区切られた「ナンバーブロック」、および数字自体は,
を含む小数のマーカー(.
のinsted)。
まず、ファイルを読む必要があります。 「ナンバーブロック」が、私は私を得るという点で素敵働いている
#include <boost/tokenizer.hpp>
string line;
ifstream myfile(file);
if (myfile.is_open())
{
char_separator<char> sep("\t");
tokenizer<char_separator<char>> tokens(line, sep);
}
myfile.close();
はまだフロートにこのchar
を変換する必要がありますが、小数点マーカーとして,
の取り扱い:現在、私はこれを使用しています。ファイルサイズのため、私はそれも良い考えではないと思いますtokenize
これも同様です。さらに、この値をすべて後で場所別にアクセスできるデータ構造に追加する必要があります(例:[x][y]
)。どのようにこれを実現するためのアイデア?私は前方にまっすぐにどうなるのか
これは3メガバイトのファイルについては本当にあるならば、私はちょうどそれをメモリにロードすると思います。これは、ほとんどのマシンで利用可能なメモリに比べてそれほど大きくはありません。 –
メモリマップファイル(boost.iostreams)と簡単なboost.spiritパーサー。すべてのファイルをロードするスレッドプール。おそらく、過度なものですが、速くしたいのであれば... –