Каков правильный способ чтения текстового файла с использованием буфера фиксированного размера в Ruby?

#ruby #performance #file #file-io

#ruby #Производительность #файл #file-io

Вопрос:

Я пытаюсь обойти медленную реализацию 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(-@offset, 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
 

Я не уверен, как я мог бы реализовать буфер, в котором я мог бы хранить оставшуюся часть каждой строки.

Ответ №1:

Аналогичная проблема обсуждалась в списке рассылки ruby-talk. Поток называется быстрым способом обработки больших файлов построчно.

Комментарии:

1. Я не вижу, что там был дан ответ.

2. В blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/225227 , посмотрите на внешний вид, начиная с while((buf2 = f.read @bufsize)) . Это мини-реализация того, чего вы пытаетесь достичь. `