如何将数组项的哈希散列发送到csv

时间:2015-10-12 14:09:55

标签: arrays windows perl csv hash

Hash of Hash of values正确地打印到csv但是数组值的散列哈希正在弄乱我的csv文件。请在下面找到我的代码无效。

<    use strict;
     use warnings;
     use Data::Dumper;

     my %student_hash;
     my $student_report = "StudentReport.csv";

     %student_hash = (
            'RollNummber1' => {
                               'studentname' => 'Boris',
                               'address' => ['Vietnam',
                                             'local'
                                            ],
                               'DOB' => '5june2000'

                               },
            'RollNummber2' => {
                               'studentname' => 'John',
                               'address' => [ 
                                             '4th/floor',
                                             'Culverdown/Street',
                                             'WestHam',
                                             'UK.',
                                            ],
                               'DOB' => '2feb2000'

                               },
            'RollNummber3' => {
                               'studentname' => 'Karen',
                               'DOB' => '5march2000'

                              }
           );

          print "StudentHash:".Dumper(\%student_hash);

          open(my $fh, '>', $student_report) or die("Couldn't open ile");
          print $fh "DOB \t,ADDRESS \t,NAME \t\n";

          foreach my $key(keys %student_hash){
           foreach my $secondkeys (keys %{$student_hash{$key}}){

             if($secondkeys =~ /DOB || studentname/) {
               print $fh "$student_hash{$key}{$secondkeys} \t,"; } 
             if($secondkeys =~ /address/) {
               print $fh Dumper $student_hash{$key}{$secondkeys} }; 
        }
    print $fh "\n";
 }
 close($fh);>

如果我注释掉打印数组部分,那么代码工作正常。有人请建议如何在一个单元格或多个单元格中将数组元素打印到csv中。谢谢

1 个答案:

答案 0 :(得分:1)

使用Text::CSV - 如果您有要打印的数组引用,则可以使用return View(model)。 (它为你处理报价)。

或者您可以使用print设置列排序,并column_names按顺序输出哈希值。

看起来你并不担心print_hr,所以你可以欺骗并做:

RollNumber

迭代。我不清楚你要对foreach my $student ( values %student_hash ) { } 做些什么。但是一个简单的address可能就是那里的伎俩。 (取决于所需的输出,在换行或空格上)。

join