Как я могу преобразовать значения с плавающей запятой в тексте в двоичный файл, используя Perl? - PullRequest
3 голосов
/ 23 мая 2010

У меня текстовый файл выглядит следующим образом:

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, если учесть, что в каждом массиве имеется более двух миллионных элементов?

1 Ответ

3 голосов
/ 23 мая 2010

Вы захотите посмотреть на binmode и pack. Вот пример, который может помочь вам начать. Я не уверен, что выбрал нужные вам шаблоны пакетов, но см. Документацию 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...