読者です 読者をやめる 読者になる 読者になる

なまけもの日記

人生のメモ帳

ftell()、fseek()

言語はPHPを使用、扱うデータはただのテキストファイル。
扱うデータの行数が20万を超えているので、毎回全探索(for文+fgets)していると死ねる。

本当はファイルの最後の行から読み込みたいが、その方法がわからない。行数が少ないのであれば全てを配列に格納してpush,popで順に取り出す方法があるが、この方法だと全てのデータを保持しておかなければならないので、メモリの問題が発生してしまう。

考えるのに疲れた結果、一度だけファイル全てを走査し、関数ftell()で各行でのファイルポインタの位置をバイト数で取得、保持しておき、次からは関数fseek()でファイルポインタを指定した行の位置に移動させてから読み込む方法を実装しました。これでなんとかファイルを下から読み込むことに成功、直接目的の行にアクセスできるから、いちいちfor文を回すよりか速く処理も軽いはず。


言語に関係なく、ファイルを下から読み込むもっと良い方法があれば教えて下さい。