頻度カウント(一般データ対応)

テキストデータファイルの各データの頻度を数える
一般のデータファイルに対応

同等のawkプログラムへ

概要

アンケート結果の集計のように、同一のデータの数を数え上げる という処理はしばしば必要になります。 数え上げる方法には何通りか考えられますが、 まずperlの特徴(連想配列)を利用して、任意のデータファイル に対応できるプログラムを作ります。

プログラム

プログラムは以下のようになります。 エディタを開き以下をタイプして、適当な名前でセーブしてください。ここでは c_freq1.pl という名前でセーブしたことにして話を進めます。
$count = 0;
while(<>) {
	s/[\r\n]//g;

	if ( !defined( $data{$_} ) ) {
		$data{$_} = 0;
		$data_name[$count] = $_;
		$count++;
	}

	$data{$_}++;
		
}
for ( $i = 0; $i < $count; $i++ ) {
	printf( "%s\t%d\n", $data_name[$i], $data{$data_name[$i]} );
}
exit;

入力データ

鈴木
佐藤
田中
佐藤
鈴木
田中
佐藤
鈴木
鈴木
というファイルが dat7.txt として存在するとします。

実行結果

OSはWindowsを利用していると 仮定します。 DOS prompt 上で、
c:\perl> perl c_freq1.pl dat7.txt
とタイプします。
鈴木	4
佐藤	3
田中	2
と出力されるはずです。

このような連想配列をperlで使うときには、 このプログラムのように自分でデータ名を 管理するのではなくeach関数を用いて、

	while(($name, $value) = each(%data) ) {
		;
	}
の形式を使うほうがスマートだとされています。 しかし、この方法ですと(出現した)順序が保たれませんし、 連想配列のない一般の言語への移植(自分でhashを作る) する場合のことを考え、このプログラムはあえてこうしています。


メニューに戻る
Tkensaku

TKENSAKU top へ

Copyright © 2004 TKEN