in reply to Reading binary file is not accurate ?

BLOCKLEN (1531) = BLOCKHDR(14) + MAXRECORD(9) * CDRLEN(160) + BLOCKTRL(77), but ...

# Read Block while (read (DATA, $data, BLOCKLEN)) { # Read Block Header read (DATA, $data, BLOCKHDR);

You read the whole block into $data and then attempt to read the individual parts, promptly overwriting (and therefore discarding) $data.

You should either:

  1. read the whole block and then extract the header/CDAs/trailer from what you read($data); or
  2. Read the header/CDAs/trailers individually.

Not do both!


Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
RIP an inspiration; A true Folk's Guy

Replies are listed 'Best First'.
Re^2: Reading binary file is not accurate ?
by bh_perl (Monk) on May 03, 2010 at 03:18 UTC
    Hi..
    Could you give some example..

      The first method I described--read the entire block, and then extract the header, records and trailer from it--would look something like this:

      while( read DATA, $data, BLOCKLEN ) { ## Extract the header from the front of the block my $header = substr $data, 0, BLOCKHDR, ''; ## do stuff with $header for my $cdr ( 1 .. MAXRECORD ) { ## Extract each record in turn from $data my $record = substr $data, 0, CDRLEN, ''; ## do stuff with $record } my $trailer = $data; ## Anything left in $data should be your trai +ler. ## do something with it. }

      The second method I described might be done something like this:

      until( eof DATA ) { read DATA, my $header, BLOCKHDR or die; ## Do stuff with $header; for my $cdr ( 1 .. MAXRECORD ) { read DATA, my $record, CDRLEN or die; ## Do stuff with $record } read DATA, my $trailer, BLOCKTRL or die; ## Do stuff with $trailer }

      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      "Science is about questioning the status quo. Questioning authority".
      In the absence of evidence, opinion is indistinguishable from prejudice.
        Hi..

        Thank you very much for your help and now my program working properly.