in reply to Re^2: Perl Unpack Cobol Binary File and Fields
in thread Perl Unpack Cobol Binary File and Fields

I would guess that your PIC(5) means four or five bytes, at least that matches up somewhat well with your data. If we assume the first four bytes, then unpack 'N', substr $str, 0,4 gives 431:

#!perl use strict; use warnings; my $str = "\0\0\1\o{257}\a\o{344}\0\3\0\0\0s\06\o{002}\o{267}"; my $data1 = unpack "N", substr($str,0,4); print $data1;

I don't know how to get from the 431 I get to the 425 you get, but maybe the other numbers give a better clue here?

Replies are listed 'Best First'.
Re^4: Perl Unpack Cobol Binary File and Fields
by dbarkho14 (Novice) on May 04, 2020 at 20:02 UTC

    Seems like unpack "N" is on the right track but I am supposed to get some records with 425 on them and I did not get any after processing the whole file. FIELD2 is supposed to be the year with 2019 as the value but I am not getting anything close to this. Maybe if you can see how to get 2019 in FIELD2 then all could fall into place. Thanks again for helping. I will keep looking.

      This suggests that every field is just 2 bytes wide and you have two dummy bytes at the start of your record. Because I get 2020 when I look at the next two bytes as a 16-bit word:

      my $data1 = unpack 'n', substr( $str, 2,2 ); my $data2 = unpack 'n', substr( $str, 4,2 );

      The data itself looks plausible but are you really sure that you are looking at the correct record?

        yes I was looking at the wrong record. Now that I am looking at the correct one, first rec has 431 and 2020 as expected. I should be able to take it from here. Thanks so much for help!