【问题标题】:Perl: Using Text::CSV to print AoHPerl:使用 Text::CSV 打印 AoH
【发布时间】:2015-06-22 18:20:08
【问题描述】:

我有一个哈希数组 (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 文件中。

【问题讨论】:

  • 到目前为止你有没有尝试过?
  • 是的,我尝试了打印数组但得到了HASH(0x......)

标签: arrays perl csv


【解决方案1】:

基本上很漂亮 - CSV 是一个基于数组的数据结构 - 它是 join 的模糊增强版本。但是你需要的东西是来自Text::CSVprint_hr

首先你需要设置你的标题顺序:

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

然后就可以使用了

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

例如

 $csv -> column_names ( qw ( User Size Unit ) ); 
 foreach my $hashref ( @homefoldersize ) {
      $csv -> print_hr ( *STDOUT, $hashref ); 
 }

由于您想连接几个列,这有点困难 - 您需要先转换数据,否则 SizeUnit 是单独的列。

foreach my $hashref ( @homefoldersize ) { 
    $hashref -> {Size} .= $hashref -> {Unit};
    delete $hashref -> {Unit};
}

另外 - 作为另一张海报说明 - 您需要设置 sep_char 以将分隔符更改为 ;

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

@values = @hash{@keys}; 

但是print_hr 做了几乎相同的事情。

【讨论】:

    【解决方案2】:

    只需要

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 我阅读了该手册,但在我的 CSV 文件中得到 HASH(0x.....) 时仍然存在问题。
      • my $csv = Text::CSV->new ( { sep_char => ';' } ); $csv->print( $fh1, \@AoH ); 是我使用的那个。
      • $csv->print 需要一个数组引用,而不是 AoH。请参阅@Barett 的答案中的文档。
      • @NeilHWatson my $AoH_ref = \@AoH; 在我的情况下使用 $AoH_ref 没有帮助。
      猜你喜欢
      • 2015-11-14
      • 1970-01-01
      • 2013-10-21
      • 2015-02-06
      • 2016-06-13
      • 2016-12-16
      • 1970-01-01
      • 1970-01-01
      • 2023-01-10
      相关资源
      最近更新 更多