我有一个哈希数组(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文件中。
答案 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 = ';'
以使其以分号分隔。