私は通常、 csvパーサーで説明されている方法を使用してスプレッドシートファイルを読み取ります。ただし、約40列と25万行のデータを含む64MBのファイルを読み取る場合、約4分かかります。元のメソッドでは、CSVRowクラスを使用してファイルを行ごとに読み取り、プライベートベクトルを使用してすべてのデータを行に格納します。
注意すべきいくつかの事柄:
- 私はベクトルの十分な容量を予約しましたが、あまり役に立ちませんでした。
- また、各行を読み取るときにクラスのインスタンスを作成する必要がありますが、コードがインスタンスを作成せずにデータを読み込んだだけでも、時間がかかります。
- ファイルはコンマ区切りではなくタブ区切りですが、重要ではないと思います。
そのファイルの一部の列は有用なデータではないため、すべてのデータを格納するプライベート文字列メンバーを持つようにメソッドを変更し、(n-1)番目とn番目の区切り文字の位置を見つけて(のもちろん、多くの有用な列があります)。そうすることで、いくつかのpush_back操作を回避し、時間を2分強に短縮します。しかし、それでも私には長すぎるようです。
これが私の質問です:
そのようなスプレッドシートファイルをより効率的に読み取る方法はありますか?
行ごとではなく、バッファごとにファイルを読み取ろうか?もしそうなら、どのようにバッファで読み取り、csvrowクラスを使用しますか?
- ブーストトークナイザーを試したことがありませんが、より効率的ですか?
ご協力ありがとうございました!