2017-09-04 136 views
0

我的表结构存储Excel数据:在哈希数组

Name  Address 
Deepti 1325 
Cizwan  324 
rikita  567 

我必须让阵列像[{Name->deepti,Address->1325},{Name->Cizwan,Address->324},{Name->Rikita,Address->567}]

表是在Excel中的数据,所以多行的存在。 在此先感谢。我尝试了一些,但无法继续。

for my $row_num (2..($max_rows)) 
{ 

    if(exists $workbook->{'cell'}[1][1]) 
     { 
      #insert values in the hash 
      $id1 = $workbook->{'cell'}[1][1]; 
      my $val1 = $workbook->{'cell'}[1][$row_num]; 
      #push values in hash 
      push (@{$hash1{$id1}},$val1); 
    } 


    if(exists $workbook->{'cell'}[2][1]) 
     { 
      #insert values in the hash 
    $id2 = $workbook->{'cell'}[2][1]; 
      my $val1 = $workbook->{'cell'}[2][$row_num]; 
    #push values in hash 
    push (@{$hash2{$id2}},$val1); 
    } 

}

print Dumper \%hash1; 
print Dumper \%hash2; 

回答

0

所以你的结构,你看像匿名散列的数组是你想要的。

这是比你想象的简单:

#!/usr/bin/env perl 

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

my @rows; 

chomp (my @header = split ' ', <DATA>); 

while (<DATA>) { 
    chomp; 
    my %row; 
    @row{@header} = split; 
    push @rows, \%row; 
} 

print Dumper \@rows; 

__DATA__ 
Name  Address 
Deepti 1325 
Cizwan  324 
rikita  567 


This outputs: 

$VAR1 = [ 
      { 
      'Address' => '1325', 
      'Name' => 'Deepti' 
      }, 
      { 
      'Name' => 'Cizwan', 
      'Address' => '324' 
      }, 
      { 
      'Address' => '567', 
      'Name' => 'rikita' 
      } 
     ]; 

但它嵌入你的代码 - 你可能会想:

push (@rows, { Name => $id2, Address => $val }); 

这工作,因为把值{}这样说,这导致返回一个匿名散列,然后可以将其插入到数组中。

+0

'chomp'调用是不必要的。 – Borodin

+0

我必须阅读excel表格,我只是perl中的一个入门者,是为此发挥的作用。 –

+0

是的。我没有电子表格,所以''假装是一样的。 – Sobrique