テキストデータファイルの各データの頻度を数える
一般のデータファイルに対応
$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 として存在するとします。鈴木 佐藤 田中 佐藤 鈴木 田中 佐藤 鈴木 鈴木
とタイプします。c:\perl> perl c_freq1.pl dat7.txt
と出力されるはずです。鈴木 4 佐藤 3 田中 2
このような連想配列をperlで使うときには、
このプログラムのように自分でデータ名を
管理するのではなくeach関数を用いて、
の形式を使うほうがスマートだとされています。
しかし、この方法ですと(出現した)順序が保たれませんし、
連想配列のない一般の言語への移植(自分でhashを作る)
する場合のことを考え、このプログラムはあえてこうしています。
while(($name, $value) = each(%data) ) {
;
}
Copyright © 2004 TKEN