2017-07-03 3 views
-1

結果、測定を保存:各測定値に各ステップに、複数の値を持つ複数の測定値とのPerlは私はこのようになります。測定値が格納されているテキストファイル持って

sometext 
Step 1: 
tphlay = 1.5e-9 
tplhay = 4.8e-9 
tphlby = 1.01e-8 
tplhby = 2.4e-10 

Step 2: 
tphlay = 2.5e-9 
tplhay = 1.8e-9 
tphlby = 6.01e-8 
tplhby = 1.4e-10 
... 

(tphlay、...)を異なるステップ。スクリプトは、arraytphlay = [1.5e-9,2.5e-9]のように、異なる配列の測定値をすべて保存できる必要があります。

すべてのステップで同じ測定値が使用されます。 問題の1つは、測定値の名前が可変であり、以前に実行されたスクリプトに依存するということです。しかし、私はこれらの名前を含む配列(namearray)を作成しました。 私の考えは、namearrayのすべての要素に対して1つの配列を作成することでしたが、これは、ソフトリファレンスを使用し、代わりにハッシュを使用する必要があるので、これは悪い習慣であると読んでいます。しかし、ハッシュについては、私はあなたが1つのキーに複数の値を割り当てることができないことを読んだ。

したがって、これらの測定値をインテリジェントな方法で保存する方法を知りたいと思います。私は単なるPerlの初心者なので多分コード例です。

答えて

1

配列への参照は、ハッシュキーの値として格納できます。

#!/usr/bin/perl 
use warnings; 
use strict; 

my %measurement; 

while (<>) { 
    if (my ($key, $value) = /(\w+)\s*=\s*([0-9.e+\-]+)/) { 
     push @{ $measurement{$key} }, $value; 
    } 
} 

use Data::Dumper; print Dumper \%measurement; 

出力:

$VAR1 = { 
      'tphlay' => [ 
         '1.5e-9', 
         '2.5e-9' 
         ], 
      'tplhay' => [ 
         '4.8e-9', 
         '1.8e-9' 
         ], 
      'tphlby' => [ 
         '1.01e-8', 
         '6.01e-8' 
         ], 
      'tplhby' => [ 
         '2.4e-10', 
         '1.4e-10' 
         ] 
     }; 
@{ ... }で最初にデリファレンス、それにプッシュするには
1

しかし、ハッシュについては、複数の値を に割り当てることはできません。

これは本当ですが、データ構造をキーに関連付けることはできません。おそらく、配列参照が必要です。

my @array = (1, 2, 3); 
# First element of the array 
$array[0]; 

# $arrayref can be thought as a pointer to an anonymous array. 
# $arrayref is called a *reference* 
my $arrayref = [ 1, 2, 3 ]; 
# First element of the anonymous array $arrayref points to. 
# The -> operator is used to dereference $arrayref, to access 
# that array. 
$arrayref->[0]; 

お知らせ(それはあなたの問題のための興味深いポイントだ)$arrayrefがあるスカラー値、ハッシュ値として使用されるので、適切な:ちょうどあなたのアイデアを得ました。例:

my %hash = (
    tphlay => [ 1.5e-9, 2.5e-9 ] 
    ... 
); 

perldataをお読みになることをお勧めします。参考文献に精通してそれらを操作する方法は、Perlプログラミングの柱の1つです。

関連する問題