-1

現在、BinData gemを使用してバイナリ ファイル形式を解析しています。どこで停止するかわからないことを除けば、問題なく動作します。ファイルは、BinData Records を使用して読み取ったプロパティに分割されています。16 ~ 18 個のプロパティが存在する可能性があります (取得するファイルによって異なります)。だから、私がこれを行うと:

16.times{
    # parse data from property.
}

16 個のプロパティがある場合は問題なく動作しますが、17 個まで上げると次のエラーが発生します。

'readbytes': End of file reached (EOFError)

私の質問は、どうすれば16回をすべて一緒に回避し、可能なすべてのプロパティを読み取るまで読み取らせ、このファイルの終わりエラーに達すると停止することができるかということです.

4

1 に答える 1

0

examples/tcp_ip.rbから:

  class PcapFile < BinData::Record
    endian :little

    struct :head do
      uint32 :magic
      uint16 :major
      uint16 :minor
      int32  :this_zone
      uint32 :sig_figs
      uint32 :snaplen
      uint32 :linktype
    end

    array :records, :read_until => :eof do
      uint32 :ts_sec
      uint32 :ts_usec
      uint32 :incl_len
      uint32 :orig_len
      string :data, :length => :incl_len
    end
  end

この例で採用されているアプローチは、BinData にレコードの配列があることを伝え、それらをすべて読み取らせることです。

于 2016-06-12T05:55:24.443 に答える