ahoriuch has asked for the wisdom of the Perl Monks concerning the following question:
Hi Monks, I have a file that is mixed with ascii text and binary. The binary part of the file is delimited by "Binary:\n". Then there is binary data that must be read 64 bits at a time. The binary data is too large to be split into a separate file or copy, so I would like to do this in one swoop. The following code does not work, it appears as if I cannot switch to binmode once I encounter the binary section of the file? Again, pretend that the binary portion is large so this needs to be done efficiently. Thanks in advance!
#!/usr/local/bin/perl use strict; use warnings; my $raw_file="spectrebin.raw"; open (FILE,$raw_file); foreach my $line (<FILE>) { if ($line=~/^Binary:/) { #Switch to binary mode #NOTE: If you comment this line in, # it works but starts reading the file from the # start, which I do not want. I want it to # read only the binary portion #open (FILE,$raw_file); binmode(FILE) or die "ERROR> Could not read binary file"; my $buffer; while ((read (FILE, $buffer, 64))!=0) { my $binary = unpack("B64",$buffer); printf "Binary: $binary\n"; } #Do not read the binary part as ascii last; } else { #the ascii part printf "ASCII: $line"; } }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Mixed text and binary file
by davido (Cardinal) on Feb 20, 2014 at 20:28 UTC | |
by ahoriuch (Acolyte) on Feb 20, 2014 at 21:10 UTC | |
by Anonymous Monk on Feb 20, 2014 at 21:59 UTC |