sysread( FCS, my $data, $eData - $sData ) or die $!; #### my %text = split $delim, $text; #### my %text = split quotemeta( $delim ), $text; #### if( $text{ '$DATATYPE' } eq 'I' and defined $text{ '$P1R' } ) { my $mask = $text{ '$P1R' } - 1; $_ &= $mask for @data; } #### my $par = $text{ '$PAR' }; for( my $i = 0; $i < @data; $i += $par ) { print join ' ', @data[ $i .. $i + $par - 1 ]; } #### my %tmpls = ( '1,2,3,4' => { I => { 16 => 'v*', 32 => 'V*' }, F => { 32 => 'f<*' }, D => { 64 => 'd<*' }, }, '4,3,2,1' => { I => { 16 => 'n*', 32 => 'N*' }, F => { 32 => 'f>*' }, D => { 64 => 'd>*' }, }, ); #### my $tmpl = $tmpls{ $text{ '$BYTEORD' } } { $text{ '$DATATYPE' } } { $text{ '$P1B' } }; #### #! perl -slw use strict; use Data::Dump qw[ pp ]; my %tmpls = ( '1,2,3,4' => { I => { 16 => 'v*', 32 => 'V*' }, F => { 32 => 'f<*' }, D => { 64 => 'd<*' }, }, '4,3,2,1' => { I => { 16 => 'n*', 32 => 'N*' }, F => { 32 => 'f>*' }, D => { 64 => 'd>*' }, }, ); open FCS, '<:raw', 'c:\downloaded\FCSExtract-TestData\FloatData4031.fcs' # 'c:\downloaded\FCSExtract-TestData\CC4_067_BM.fcs' or die $!; sysread( FCS, my $header, 58 ) or die $!; my( $id, $sText, $eText, $sData, $eData, $sAnalysis, $eAnalysis ) = unpack 'A6 x4 (A8)6', $header; sysseek FCS, $sText, 0 or die $!; sysread( FCS, my $text, $eText - $sText ) or die $!; my $delim = substr $text, 0, 1, ''; my %text = split quotemeta( $delim ), $text; pp \%text; <>; sysseek FCS, $sData, 0 or die $!; sysread( FCS, my $data, $eData - $sData +1 ) or die $!; my $tmpl = $tmpls{ $text{ '$BYTEORD' } }{ $text{ '$DATATYPE' } }{ $text{ '$P1B' } }; die 'Can\'t handle format' unless $tmpl; my @data = unpack $tmpl, $data; if( $text{ '$DATATYPE' } eq 'I' and defined $text{ '$P1R' } ) { my $mask = $text{ '$P1R' } - 1; $_ &= $mask for @data; } my $par = $text{ '$PAR' }; for( my $i = 0; $i < @data; $i += $par ) { print join ' ', @data[ $i .. $i + $par - 1 ]; }