本当は私がやろうと思っていたけど、諸般の事情で人に任せることにしました。こういう条件です。
- 1レコード長不定のCSVファイル。
- カンマ区切りでデータ中にカンマは出てこないものとする。
- CSVの大きさは2GB超を考慮する
- 開発環境はVisual C++ 2003で使っていいのはCRTとWindows API、C++の言語機能のみ。
- 改行はCR+LFのみ
- 文字はSHIFT-JISのみ
- 当然先頭から一行ずつ読み込んで末尾行を判定するロジックは禁止。
こういう条件のCSVで、末尾にある行の先頭桁が数字になっています。この値を取得しなさい…という機能を作ってもらったら三日分の時間を使っても期待するものができませんでしたorz。(大サービスで)CSVファイルの末尾がCR+LFで終わっているとは限らない(末尾の改行がない)…ということまでは教えたのですが。
正確に言えば、それなりには動くのだけれど、「CSV一行が読み込みバッファを越えたときの処理がない」とか「CR+LFが境界ぴったりにはまったときの処理がない」というケースの処理が丸ごと抜け落ちています。うーん、それなりに経験をつんでいるはずなんだけれど、こういうプログラム作る機会がないからなのかなぁ。なにも非同期I/O使えとか、読み込みバッファはディスクのセクタサイズと同じにしてmsでも稼ごうなんてことを言っていないのに。FizzBuzzをとかせてみたくなってきた。