Perl:使用Text :: CSV打印AoH

时间:2015-06-22 18:20:08

标签: arrays perl csv

我有一个哈希数组(AoH),如下所示:

$VAR1 = [
          {
            'Unit' => 'M',
            'Size' => '321',
            'User' => 'test'
          }
          {
            'Unit' => 'M'
            'Size' => '0.24'
            'User' => 'test1'
          }
          ...
        ];

如何将AoH写入带有分隔符的CSV文件,以获得以下结果:

test;321M
test1;0.24M

我已经尝试过这段代码:

my $csv = Text::CSV->new ( { sep_char => ';' } );
$csv->print( $fh1, \@homefoldersize );

但是我得到了

HASH(0x....)

在我的CSV文件中。

3 个答案:

答案 0 :(得分:1)

非常基础 - CSV是基于数组的数据结构 - 它是join的模糊增强版本。但是,这项工作所需要的是来自print_hr的{​​{1}}。

首先,您需要设置标题顺序:

Text::CSV

然后你可以使用

 $csv->column_names (@names);          # Set column names for getline_hr ()

E.g。

 $csv -> print_hr ( *STDOUT, $hashref ); 

虽然您希望连接几个列,但稍微更难 - 您需要首先转换数据,否则 $csv -> column_names ( qw ( User Size Unit ) ); foreach my $hashref ( @homefoldersize ) { $csv -> print_hr ( *STDOUT, $hashref ); } Size是单独的列。

Unit

此外 - 另一张海报说明 - 您需要设置foreach my $hashref ( @homefoldersize ) { $hashref -> {Size} .= $hashref -> {Unit}; delete $hashref -> {Unit}; } 以将分隔符更改为sep_char

作为替代方案 - 您可以使用哈希切片:

;

@values = @hash{@keys}; 几乎完全相同。

答案 1 :(得分:1)

所有必要的是

printf "%s;%s%s\n", @{$_}{qw/ User Size Unit /} for @homefoldersize;

答案 2 :(得分:0)

尝试使用此处发布的Text :: CSV示例:http://search.cpan.org/~makamaka/Text-CSV-1.33/lib/Text/CSV.pm

您需要设置sep_char = ';'以使其以分号分隔。