2011-10-27 4 views
0

Rubyの遅いFile.each_line実装を回避しようとしています。Rubyで固定サイズのバッファを使ってテキストファイルを読み込む正しい方法は何ですか?

def parse 
    @file   = File.open(@file) 
    @filesize  = @file.stat.size 
    @buffer_size = 10485 
    @offset  = @buffer_size 
    @counter  = 0 
    @line_counter = 0 

    @file.seek(0, File::SEEK_END) 
    while @file.tell > 0 
     @file.seek([email protected], File::SEEK_END) 
     buffer = @file.read(@buffer_size) 
     buffer_line = buffer.split("\n")[1] 
     @counter += 1 
     puts @counter 
     @offset += @buffer_size 
     return if @offset > @filesize 
    end 
    end 

各行の残りの部分を保存できるバッファを実装するにはどうすればよいかわかりません。

答えて

0

ルビートークメーリングリストでも同様の問題が議論されています。スレッドは Fast way to process large files line by lineと呼ばれます。

+0

私はそれがそこに答えられたのを見ることができません。 – Istvan

+0

http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/225227では、「while((buf2 = f.read @bufsize)」で始まる外観を見てください。 。あなたが達成しようとしているもののミニ実装です。 ' – gioele

関連する問題