2017-09-04 180 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