#調査票のデータから組成票を作成するプログラム(被度or個体数バージョン)
#2002,10,28完成
#「被度」は個体数などでもOK
#同じ調査区で同じ種が出現した場合は、被度(個体数)を累計する
#前回の組成表プログラムを少しいじっただけ
#もう少しいじれば、階層別の表も可能かも
#入力ファイルと出力ファイルの形式は最後に記載

#ファイルを開く-----------------------------------------------------------------
print"開くファイルは？";
chomp($file=<STDIN>);

while(not -e $file) {
	print"ファイルがありません\n";
	print"開くファイルは？";
	chomp($file=<STDIN>);
}
	open TMP ,$file;
#-------------------------------------------------------------------------------

#表題・調査区名・種名の読み込み-------------------------------------------------
$i=1;		#カウンタの初期設定

chomp($line=<TMP>);		#表題の読み込み
$title=$line;			#表題の読み込み
while ($line = <TMP>){
	chomp $line;		#	$line の末尾の改行コードを削除する
	($pl[$i],$sp[$i],$cv[$i]) = split (/\s+/, $line);	#調査区名,種名,被度読込
	++$i;
}

$number_of_data=$i-1;	#総データ数
#-------------------------------------------------------------------------------

#調査区名・種名の抽出-----------------------------------------------------------
for ($i=1 ; $i<=$number_of_data ; $i++){
	$plot_hash{$pl[$i]}=1;
	$species_hash{$sp[$i]}=1;
}
@plot_list=keys %plot_hash;
@species_list=keys %species_hash;
@plot_list=sort @plot_list;			#並べ替えをして、元の配列に入れなおす
@species_list=sort @species_list;	#並べ替えをして、元の配列に入れなおす

$i=1;					#カウンタの初期設定
foreach (@plot_list){
	$plot[$i]=$_;		#$_は取出した配列の要素「perl入門」p61
	$i++;
}
$number_of_plot=$i-1;

$i=1;					#カウンタの初期設定
foreach (@species_list){
	$species[$i]=$_;		#$_は取出した配列の要素「perl入門」p61
	$i++;
}
$number_of_species=$i-1;
#-------------------------------------------------------------------------------

#種の出現状況-------------------------------------------------------------------
for ($i=1 ; $i<=$number_of_data ; $i++){
	for ($j=1 ; $j<=$number_of_plot ; $j++){
		if($pl[$i] eq $plot[$j]){		#文字列の比較演算子で等しいは"eq"
			for ($k=1 ; $k<=$number_of_species ; $k++){
				if($sp[$i] eq $species[$k]){	#文字列の比較演算子で等しいは"eq"
					$n[$j][$k]+=$cv[$i];
				}
			}
		}
	}
}
#-------------------------------------------------------------------------------

#種名と調査区名の代入-----------------------------------------------------------
for ($j=1 ; $j<=$number_of_plot ; $j++){
	$n[$j][0]=$plot[$j];
}

for ($k=1 ; $k<=$number_of_species ; $k++){
	$n[0][$k]=$species[$k];
}
#-------------------------------------------------------------------------------

#出力するファイルを新規作成する-------------------------------------------------
$fileout="$file"."_out";
open OUT,">$fileout";
#-------------------------------------------------------------------------------

#有無形式の組成票を出力する-----------------------------------------------------
c
for ($i=0 ; $i<=$number_of_species ; $i++){
	for ($j= 0 ; $j<=$number_of_plot ; $j++){
		print OUT "$n[$j][$i]\t";
	}
	print OUT "\n";
}
close OUT;
#-------------------------------------------------------------------------------

#入力ファイルは下記の形式のタブやスペース区切りのテキストファイル
#表題・調査区名・種名は省略しないこと。
#省略すると繰り返し計算に影響が出て正しい答えが出ない。
#表題							#1行目は表題のみ
#調査区名1	種名1	被度1
#調査区名2	種名2	被度2
#調査区名3	種名3	被度3
#
#
#出力ファイルは下記の形式のタブ区切りのテキストファイル
#ファイル名は「入力ファイル」に「_out」をつけた形式で出力する。
#表題	調査区名1	調査区名2	・・・
#種名1	被度	被度	・・・#有りの場合は1、無しの場合は空白
#種名2	被度	被度	・・・
#註：同じ調査区で同じ種が出現した場合は、被度(個体数)を累計する。
