id:kikuchiK wrote:
>末尾の1,2万行
これってアバウトでいいん?
行のサイズが大方予想がつくなら、まずテキトーにシークしちゃってからちょっと読んで近場の改行コードをバイナリ扱いで探して、StreamのPosition合わせて後は一気読みって感じでアバウトにだいたい何行ぐらい取れますとかできそうな気が。
ロジック的にいえば末尾から何メガ(キロ?)バイト付近の改行以降全部を取るって感じだけど。
この方法なら元ファイルのサイズには速度的には影響受けないですね。
実はこの2600万行のテキストって、ワトソン博士のログだったのです。どうも保存する数を間違えていたようで…。よって、直近の1,2日分のログがほしいだけなので、行数はアバウトで全然おっけぃです。行のサイズもちょっと予想がつかなかったのですが、少なくとも秀丸の最大(1000万行)は超えていたので、tailみたいなものを簡単に作ろうと決心しました。今回一回限りだったので、ちょっとさぼり(の割には実行時間がかかってしまいました…)。
確かに高速にtailっぽいものを作る場合は数MBずつどんどんと読んで改行探して…でしょうね。また近いうちに高速なテキスト分割作らないといけないので(次はC++だけど)、今度はもっとがんばる。