Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Perl将文本中的浮点值转换为二进制?_Perl - Fatal编程技术网

如何使用Perl将文本中的浮点值转换为二进制?

如何使用Perl将文本中的浮点值转换为二进制?,perl,Perl,我的文本文件如下所示: float a[10] = { 7.100000e+000 , 9.100000e+000 , 2.100000e+000 , 1.100000e+000 , 8.200000e+000 , 7.220000e+000 , 7.220000e+000 , 7.222000e+000 , 1.120000e+000 , 1.987600e+000 }; unsigned int col_ind

我的文本文件如下所示:

float a[10] = {
    7.100000e+000 ,
    9.100000e+000 ,
    2.100000e+000 ,
    1.100000e+000 ,
    8.200000e+000 ,
    7.220000e+000 ,
    7.220000e+000 ,
    7.222000e+000 ,
    1.120000e+000 ,
    1.987600e+000
};

unsigned int col_ind[10] = {
    1 ,
    4 ,
    3 ,
    4 ,
    5 ,
    2 ,
    3 ,
    4 ,
    1 ,
    5
};
现在,我想将每个数组(float/unsigned int)转换为不同的二进制文件类型,一个二进制文件用于所有浮点值,一个二进制文件用于所有整数值

什么是在Perl做这件事的简单方法,考虑到我在每一个数组中都有两个以上的元素?

你会想研究一下。下面是一个可能让您开始学习的示例。我不确定我是否选择了您需要的包模板,但请参阅
pack
文档了解所有选择

use strict;
use warnings;

my ($fh, $pack_template);

while (my $line = <>){
    if ( $line =~ /(float|int)/ ){
        $pack_template = $1 eq 'int' ? 'i' : 'f';

        undef $fh;
        open $fh, '>', "$1.dat" or die $!;
        binmode $fh;

        next;
    }

    next unless $line =~ /\d/;
    $line =~ s/[,\s]+$//;

    print $fh pack($pack_template, $line);
}
使用严格;
使用警告;
我的($fh,$pack_模板);
while(我的$line=){
如果($line=~/(float | int)/){
$pack_template=$1 eq'int'?'i':'f';
未定义$fh;
打开$fh、“>”、“$1.dat”或die$!;
binmode$fh;
下一个
}
除非$line=~/\d/;
$line=~s/[,\s]+$/;
打印$fh pack($pack\u模板,$line);
}

谢谢您的回答。现在,它看起来很简单:)