如何使用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);
}
谢谢您的回答。现在,它看起来很简单:)