Perlピボット処理

提供: dococo wiki
ナビゲーションに移動 検索に移動

ピボット処理とは

よく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";