Как я могу прочитать файл, байтов за раз в Ruby? - PullRequest
2 голосов
/ 27 августа 2010

Я хочу итеративно прочитать фиксированное количество байтов в файле и вернуть их

Мой код приведен ниже.Я взял это из примера в Интернете

File.open('textfile.txt') do |file|
  while (buffer = file.read(size)) do
     yield buffer
  end
end

Я получаю сообщение об ошибке без блока данных.

Ответы [ 2 ]

5 голосов
/ 27 августа 2010

Я не знаю, что вы пытаетесь сделать с урожайностью там.Выход - это то, что вы используете внутри блока, который вы собираетесь повторно вызывать, например, перечислитель.Гораздо проще сделать что-то подобное.

File.open('test.txt') do|file|
  until file.eof?
    buffer = file.read(10)
    # Do something with buffer
    puts buffer
  end
end
5 голосов
/ 27 августа 2010

Ну, это потому, что блок не указан. Вы можете либо заменить yield buffer на puts buffer (или любую другую операцию, которую хотите), либо создать отдельный метод с использованием блока кода:

def read_file
  File.open('textfile.txt') do |file|
    while (buffer = file.read(size)) do
      yield buffer
    end
  end
end

и назовите это так

read_file do |data|
  // do something with data
  puts data 
end

Добавьте обычные параметры (например, имя файла или размер блока) к read_file, если необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...