2011-12-22 8 views
0

2つのExcelファイルがあります。ファイルを最初に優れ、このようなものです:私が最初に優れたファイルができます既存の複合ハッシュ構造のキーと配列を関連付ける方法

 
$VAR1 = { 
    'P5' => { 
  'E' => '06' => [100, 200, 95] 
    'B' => '23' => [20, 1000, 05, 30] 
   }, 
  'P2' => { 
        'C' => '24' => [18, 23, 2300, 3456] 
  }, 
  'P1' => { 
        'A' => '12' => [24, 25, 3200, 5668] 
        'D' => '15' => [168] 
      } 
}; 

次のようなデータ構造を生成したい

06 100 
23 20 
06 200 
06 95 
23 05 
24 18 

12 A P1 
23 B P5 
24 C P2 
15 D P1 
06 E P5 

二エクセルのファイルこのようなものです私は以下のデータ構造を生成します。次のように私は最初から上記の部分構造を実現するために、ファイルをエクセルなかった何

 
$VAR1 = { 
  'P5' => { 
    'E' => '06', 
    'B' => '23' 
    }, 
    'P2' => { 
      'C' => '24' 
    }, 
    'P1' => { 
      'A' => '12', 
      'D' => '15' 
    } 
  }; 

は次のとおりです。

my %Var1; 
for my $i (1 .. $row1) 
{ 
    # for simplicity, I just keep the main part to building this hash chain 
    $Var1{$column3}->{$column2} = {$column1}; 
}     

ここ$column3p1p2などに関し、 $column2E,Bなどであり、$column106,23,24などに関する。 $column1に関連付けられた配列は、2番目のExcelファイルから抽出されます。

私の質問は、第二のExcelファイルを横断しながら、それに100をプッシュするために、06のように、この部分的に完成したハッシュ%Var1通じ、各キーのために反復する方法です。だから、

答えて

1

、(数字キー(この例では「06」)を呼び出す何イム)と仮定すると、おそらくその後、配列リファレンスを返す関数ユニークです:数値キーが見つからない場合

sub get_arrayref_from_nkey { 
    my $target = shift; 
    for my $pkey (keys %Var1) { 
     for my $akey (keys %{ $Var1{$pkey} }) { 
      for my $nkey (keys %{ $Var1{$pkey}->{$akey} }) { 
       if ($nkey eq $target) { 
        # return the arrayref to [ 100, 200, 95, .. ] 
        return @{ $Var1{$pkey}->{$akey}->{$nkey} }; 
       } 
      } 
     } 
    } 
} 

my $arrayref = get_arrayref_from_nkey('06'); 
push @{ $arrayref }, $value; # 100 

関数はundefを返します。また、数値キーが一意でない場合、これは機能しません - それは最初に見つかったnkeyを返すためです。

+0

また、配列/ハッシュリファレンスについてはhttp://perldoc.perl.org/perlreftut.htmlを読むことをお勧めします。本当に私を助けました! – Richard

+0

リチャード、返事をありがとう。私の質問は、最初のExcelファイルの部分的なハッシュ構造を既に持っていると仮定します。最初の行は06 00です。まず、既存の部分ハッシュ構造で06の位置を見つけ、このキーに100を追加する必要があります。06既存のハッシュ構造はかなり複雑であるため、私はこの重要な発見操作を実行する方法を知らない。ありがとう。 – user1109094

+0

キー '06'を別のセクションに表示できますか?例えばP1とP5 - あるいはユニークなキーですか? – Richard

関連する問題