从2D数组Perl创建CSV文件

js5cn81o  于 2023-11-14  发布在  Perl
关注(0)|答案(2)|浏览(96)

我试图加载一个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

l7wslrjt

l7wslrjt1#

请参考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: $!";

字符串

ux6nzvsh

ux6nzvsh2#

沿着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: $!";

字符串

相关问题