Perlピボット処理
2017年10月15日 (日) 10:04時点におけるimported>Webmasterによる版 (ページの作成:「== ピボット処理とは == よくEXCELで使われるピボットテーブルをPerlで行うための、アルゴリズムの一部分を説明する。<br /> クロ...」)
ピボット処理とは
よくEXCELで使われるピボットテーブルをPerlで行うための、アルゴリズムの一部分を説明する。
クロス集計でありある条件の元に配列にデータを入れるやり方である
サンプルプログラム
非常に簡単だけども奥が深い処理です。
この処理は出現した変数($Nunber_Of_countermeasure)と同じ名前のハッシュ配列を作成して、その配列の中に$Nunber_Of_countermeasureの値を入れる処理です。
if (exists $hash{$Nunber_Of_countermeasure}) {
push (@{$hash{$Nunber_Of_countermeasure}}, $Nunber_Of_countermeasure);
} else {
$hash{$Nunber_Of_countermeasure} = [$Nunber_Of_countermeasure];
}
もうすこし詳しく説明
my %hash;
my $Nunber_Of_countermeasure = 'AAA';
if (exists $hash{$Nunber_Of_countermeasure}) {
#ハッシュに値が存在する場合、その値と同じ値を代入する
#普通のリファレンスの場合
#
#my @foo;
#push @foo, "OK";
#と言うように配列にPushしてやればよい
#
#しかしここでは配列のリファレンスの場合、ブレースでくくる必要がある
#my $foo;
#push @{$foo}, "OK";
#
push (@{$hash{$Nunber_Of_countermeasure}}, $Nunber_Of_countermeasure);
} else {
#ハッシュに値が存在しない場合、新しいキーを作成してデータを配列をリファレンスとして代入する
#そうすることで$hash{$Nunber_Of_countermeasure}は配列のリファレンスとなる
#
$hash{$Nunber_Of_countermeasure} = [$Nunber_Of_countermeasure];
}
#$hash{$Nunber_Of_countermeasure} = [$Nunber_Of_countermeasure];
#という部分で、ハッシュに配列のリファレンスとして代入しているため
#表示にはデリファレンスしないといけない
#リファレンスから元のものにアクセスする(デリファレンスする)には
#スカラーは ${ }
#配列は @{ }
#ハッシュは %{ }
#サブルーチンは &{ }
#であるため、
print @{$hash{'AAA'}};# @{....}で配列のデリファレンス。
print scalar(@{$hash{'AAA'}});#ちなみにscalarで括ると、要素の数を取得できる
print "\n";