Создание CSV файла из массива 2d perl

Я пытаюсь загрузить файл csv, перенести его и написать новый. У меня все работает правильно, кроме написания нового файла. Я смотрел онлайн без успеха.

use strict;
use warnings;
use Text::CSV;
use Data::Dump qw(dump);
use Array::Transpose;

my @data; # 2D array for CSV data
my $file = 'sample_array.csv';

my $csv = Text::CSV->new;
open my $fh, '<', $file or die "Could not open $file: $!";

while( my $row = $csv->getline( $fh ) ) { 
shift @$row; # throw away first value
push @data, $row;
}
@data=transpose(\@data);
dump(@data);

Выходной сигнал здесь представляет собой транспонированный массив @data (["blah", 23, 22, 43], ["tk1", 1, 11, 15],["huh", 5, 55, 55]). Мне нужен этот вывод для записи в новый файл CSV.

CSV файл:

text,blah,tkl,huh
14,23,1,5
12,22,11,55
23,42,15,55
2 ответа

См. Код после dump. Это было получено из СИНТАКСИС Text :: CSV:

use strict;
use warnings;
use Text::CSV;
use Data::Dump qw(dump);
use Array::Transpose;

my @data; # 2D array for CSV data
my $file = 'sample_array.csv';

my $csv = Text::CSV->new;
open my $fh, '<', $file or die "Could not open $file: $!";

while( my $row = $csv->getline( $fh ) ) { 
 shift @$row; # throw away first value
 push @data, $row;
}
@data=transpose(\@data);
dump(@data);

open $fh, ">:encoding(utf8)", "new.csv" or die "new.csv: $!";
for (@data) {
 $csv->print($fh, $_);
 print $fh "\n";
}
close $fh or die "new.csv: $!";


Наряду с добавлением Toolic мне пришлось внести некоторые изменения из-за специфического типа данных, с которыми я имел дело. Это был чрезвычайно большой набор с инженерными символами и единицами и отрицательными числами с длинными десятичными знаками. Для справки мой последний код приведен ниже.

use strict;
use warnings;
use Text::CSV;
use Data::Dump qw(dump);
use Array::Transpose;
my @data; # 2D array for CSV data
my $file = 'rawdata.csv';

my $csv = Text::CSV->new({ binary => 1, quote_null => 0 });
open my $fh, '<', $file or die "Could not open $file: $!";

while( my $row = $csv->getline( $fh ) ) { 
#shift @$row; # throw away first value, I needed the first values.
push @data, $row;
}

@data=transpose(\@data);

open $fh, ">:encoding(utf8)", "rawdata_trans.csv" or die "rawdata_trans.csv: $!";
for (@data) {
$csv->print($fh, $_);
print $fh "\n";
}
close $fh or die "rawdata_trans.csv: $!";

licensed under cc by-sa 3.0 with attribution.