[Ruby] Как разобрать двоичный файл?
Dennis Vshivkov
walrus на amur.ru
Сб Янв 15 02:49:27 MSK 2005
On Fri, Jan 14, 2005 at 10:40:57PM +0300, Тим Алексеевский wrote:
>> Телефония.
>> Имеем некий файлик с разговорами с коммутатора. Запись = 187 байт.
>> Разнесены они по разным полям.
>> Записей - может быть сколько угодня
>> Требуется наваять парсер.
>> Вопрос такий:
>> 1. Как считывать по 187 байт
> f=File.new("testfile")
> s=r.read(187)
> (после этого еще проверить, что s длиной 187, может быть меньше,
> "если не хватает")
$ ls -l txt
-rw-rw-r-- 1 walrus walrus 685 Dec 6 15:05 txt
$ ruby -rreadbytes -e 'loop { puts $stdin.readbytes(187).size }' < txt
187
187
187
/usr/lib/ruby/1.8/readbytes.rb:21:in `readbytes': data truncated (TruncatedDataError)
from -e:1
from -e:1:in `loop'
from -e:1
>> 2. Как из затолкать в некую структуру, что сразу поля получились?
>> Типа первые 4 туда, вторые 4 - сюда, потом 8 еще воооон туда
> может unpack?
> Например:
> a=s.unpack("llq")
> (получится массив, его можно в hash распихать если нужно)
> t=["first-4", "second-4", "third-8"]
> h={}
> a.each_with_index{|v,i| h[t[i]]=v}
> (теперь первое поле например будет доступно как h["first-4"])
h = {}
loop {
h[:foo], dummy, h[:bar] = $stdin.readbytes(187).unpack("NNS")
p h
}
--
/Awesome Walrus <walrus на amur.ru>
...И стал человек человеком во имя любви...
Подробная информация о списке рассылки Ruby