2011-10-27 31 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

在ruby-talk郵件列表上討論了類似的問題。該線程被稱爲 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

相關問題