Как читать фиксированный размер байтов по очереди в продолжение, используя Ruby? - PullRequest
0 голосов
/ 31 марта 2012

У меня есть один двоичный файл, и я хочу прочитать этот файл как первые четыре байта, затем следующие 5 байтов, затем следующие 3 байта, пока файл не закончится.

Я могу прочитать файл с использованием each_byte, но я хочу классифицировать все эти байты по группам в порядке их сохранения в файле.

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

File.open('myfile','rb') do |file|
file.each_byte {|ch| print "#{ch.chr}:#{ch}\t"}

конец

Ответы [ 2 ]

1 голос
/ 31 марта 2012

Я не уверен, что понимаю, но может быть что-то вроде:

file.read.scan(/(.{4})(.{5})(.{3})/).each do |a,b,c|
    puts "first 4 bytes: #{a}"
    puts "bytes 5 to 10: #{b}"
    puts "3 more bytes: #{c}"
end
0 голосов
/ 31 марта 2012

Это не очень быстро, но это рубин: -)

file.each_byte.slice_before({pattern: [4,5,3].cycle, left: 0}) do |ele, state|
  if state[:left] == 0
    state[:left] = state[:pattern].next
    true
  else
    state[:left] -= 1
    false
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...