#
#全てのグループを相対的に見るデータ抽出プログラム
#	author	akinori-i
#	
#	参考プログラム
#		MboxnetworkmergePajek.pl（いはら）
#
#	◇入力
#		マージする.netファイル(opendir関数でフォルダ内にあるファイルを全部を対象としている)
#
#	◇出力
#		
#
#
#
#�@１ファイル読み込む（opendir関数で同じ年月のファイルをひたすら読み込む）
#
#�A名前からkeyのハッシュを作る（新人には新しいkeyを割り当てていく）
#
#�Bkeyから名前のハッシュも作る
#
#�Ckeyからグループidを作成（他のグループにも存在すればグループidを加算していく）
#
#�D配列として、data[key][年月][グループid（２進数）]
#
#�E�@〜�Dを繰り返す
#
#�F次の月になったとき、名前からkeyが見つかったら、data[key][月日１][グループid１]に保存
#
############################################
#
#�@ファイル名をopendirで配列にほりこむ
#
#�A次の月、次の月としていくfor文
#
#�B同じ年月のファイルを読み込むfor文
#
#�C名前からキー＆キーから名前
#
#�Dキーからグループ
#
#�E配列にほりこむ
#
#�F�A閉じる
#
#�G�B閉じる
#
#
#
#

use strict;
use warnings;

my @opendir;
my $i;
my $filename;
my @nameline;
my $old;
my %key;
my $gip3;
my @data;
my %name;
my %newold;
my %groupid;
my %year;
my $m;
my $n;


&database();

sub database {
	my $j=0;
	my $k=1;
	
	@data=();
	
	#@opendirにこのプログラムが置かれているファイル名がすべて入っている
	opendir(DIR, ".") or die;
	@opendir = sort readdir(DIR);
	closedir(DIR);
	#print "@opendir";
	#print "aaaaaaaaaaaaaaaaaaaaa\n";
	for($i=0; $i<$#opendir; $i++){
		my $newid=1;
		if($opendir[$i] =~ /[0-9]{6}/){
			#print "bbbbbbbbbbbb\n";
			$filename = $opendir[$i];
#################################################################################
			if($filename =~ /bugs/){$k=1;}
			elsif($filename =~ /general/){$k=2;}
			elsif($filename =~ /hackers/){$k=3;}
#################################################################################
			open NET,"$filename";
			$filename =~ tr/0-9/ /cs;
			$filename =~ s/ //;
			$filename =~ s/ //;
#################################################################################
			if($filename =~ /199612/){$filename=0;}
			elsif($filename =~ /199701/){$filename=1;}
			elsif($filename =~ /199702/){$filename=2;}
			elsif($filename =~ /199703/){$filename=3;}
			elsif($filename =~ /199704/){$filename=4;}
			elsif($filename =~ /199705/){$filename=5;}
			elsif($filename =~ /199706/){$filename=6;}
			elsif($filename =~ /199707/){$filename=7;}
			elsif($filename =~ /199708/){$filename=8;}
			elsif($filename =~ /199709/){$filename=9;}
			elsif($filename =~ /199710/){$filename=10;}
			elsif($filename =~ /199711/){$filename=11;}
			elsif($filename =~ /199712/){$filename=12;}
			elsif($filename =~ /199801/){$filename=13;}
			elsif($filename =~ /199802/){$filename=14;}
			elsif($filename =~ /199803/){$filename=15;}
			elsif($filename =~ /199804/){$filename=16;}
			elsif($filename =~ /199805/){$filename=17;}
			elsif($filename =~ /199806/){$filename=18;}
			elsif($filename =~ /199807/){$filename=19;}
			elsif($filename =~ /199808/){$filename=20;}
			elsif($filename =~ /199809/){$filename=21;}
			elsif($filename =~ /199810/){$filename=22;}
			elsif($filename =~ /199811/){$filename=23;}
			elsif($filename =~ /199812/){$filename=24;}
			elsif($filename =~ /199901/){$filename=25;}
			elsif($filename =~ /199902/){$filename=26;}
			elsif($filename =~ /199903/){$filename=27;}
			elsif($filename =~ /199904/){$filename=28;}
			elsif($filename =~ /199905/){$filename=29;}
			elsif($filename =~ /199906/){$filename=30;}
			elsif($filename =~ /199907/){$filename=31;}
			elsif($filename =~ /199908/){$filename=32;}
			elsif($filename =~ /199909/){$filename=33;}
			elsif($filename =~ /199910/){$filename=34;}
			elsif($filename =~ /199911/){$filename=35;}
			elsif($filename =~ /199912/){$filename=36;}
			elsif($filename =~ /200001/){$filename=37;}
			elsif($filename =~ /200002/){$filename=38;}
			elsif($filename =~ /200003/){$filename=39;}
			elsif($filename =~ /200004/){$filename=40;}
			elsif($filename =~ /200005/){$filename=41;}
			elsif($filename =~ /200006/){$filename=42;}
			elsif($filename =~ /200007/){$filename=43;}
			elsif($filename =~ /200008/){$filename=44;}
			elsif($filename =~ /200009/){$filename=45;}
			elsif($filename =~ /200010/){$filename=46;}
			elsif($filename =~ /200011/){$filename=47;}
			elsif($filename =~ /200012/){$filename=48;}
			elsif($filename =~ /200101/){$filename=49;}
			elsif($filename =~ /200102/){$filename=50;}
			elsif($filename =~ /200103/){$filename=51;}
			elsif($filename =~ /200104/){$filename=52;}
			elsif($filename =~ /200105/){$filename=53;}
			elsif($filename =~ /200106/){$filename=54;}
			elsif($filename =~ /200107/){$filename=55;}
			elsif($filename =~ /200108/){$filename=56;}
			elsif($filename =~ /200109/){$filename=57;}
			elsif($filename =~ /200110/){$filename=58;}
			elsif($filename =~ /200111/){$filename=59;}
			elsif($filename =~ /200112/){$filename=60;}
			elsif($filename =~ /200201/){$filename=61;}
			elsif($filename =~ /200202/){$filename=62;}
			elsif($filename =~ /200203/){$filename=63;}
			elsif($filename =~ /200204/){$filename=64;}
			elsif($filename =~ /200205/){$filename=65;}
			elsif($filename =~ /200206/){$filename=66;}
			elsif($filename =~ /200207/){$filename=67;}
			elsif($filename =~ /200208/){$filename=68;}
			elsif($filename =~ /200209/){$filename=69;}
			elsif($filename =~ /200210/){$filename=70;}
			elsif($filename =~ /200211/){$filename=71;}
			elsif($filename =~ /200212/){$filename=72;}
			elsif($filename =~ /200301/){$filename=73;}
			elsif($filename =~ /200302/){$filename=74;}
			elsif($filename =~ /200303/){$filename=75;}
			elsif($filename =~ /200304/){$filename=76;}
			elsif($filename =~ /200305/){$filename=77;}
			elsif($filename =~ /200306/){$filename=78;}
			elsif($filename =~ /200307/){$filename=79;}
			elsif($filename =~ /200308/){$filename=80;}
			elsif($filename =~ /200309/){$filename=81;}
			elsif($filename =~ /200310/){$filename=82;}
			elsif($filename =~ /200311/){$filename=83;}
			elsif($filename =~ /200312/){$filename=84;}
			elsif($filename =~ /200401/){$filename=85;}
			elsif($filename =~ /200402/){$filename=86;}
			elsif($filename =~ /200403/){$filename=87;}
			elsif($filename =~ /200404/){$filename=88;}
			elsif($filename =~ /200405/){$filename=89;}
			elsif($filename =~ /200406/){$filename=90;}
			elsif($filename =~ /200407/){$filename=91;}
			elsif($filename =~ /200408/){$filename=92;}
			elsif($filename =~ /200409/){$filename=93;}
			elsif($filename =~ /200410/){$filename=94;}
			elsif($filename =~ /200411/){$filename=95;}
			elsif($filename =~ /200412/){$filename=96;}
			elsif($filename =~ /200501/){$filename=97;}
			elsif($filename =~ /200502/){$filename=98;}
			elsif($filename =~ /200503/){$filename=99;}
			elsif($filename =~ /200504/){$filename=100;}
			elsif($filename =~ /200505/){$filename=101;}
			elsif($filename =~ /200506/){$filename=102;}
			elsif($filename =~ /200507/){$filename=103;}
			elsif($filename =~ /200508/){$filename=104;}
			elsif($filename =~ /200509/){$filename=105;}
			elsif($filename =~ /200510/){$filename=106;}
			elsif($filename =~ /200511/){$filename=107;}
			elsif($filename =~ /200512/){$filename=108;}
			elsif($filename =~ /200601/){$filename=109;}
			elsif($filename =~ /200602/){$filename=110;}
			elsif($filename =~ /200603/){$filename=111;}
			elsif($filename =~ /200604/){$filename=112;}
			elsif($filename =~ /200605/){$filename=113;}
			elsif($filename =~ /200606/){$filename=114;}
			elsif($filename =~ /200607/){$filename=115;}
			elsif($filename =~ /200608/){$filename=116;}
			elsif($filename =~ /200609/){$filename=117;}
			elsif($filename =~ /200610/){$filename=118;}
			elsif($filename =~ /200611/){$filename=119;}
			elsif($filename =~ /200612/){$filename=120;}
			elsif($filename =~ /200701/){$filename=121;}
			elsif($filename =~ /200702/){$filename=122;}
			elsif($filename =~ /200703/){$filename=123;}
			elsif($filename =~ /200704/){$filename=124;}
			elsif($filename =~ /200705/){$filename=125;}
			elsif($filename =~ /200706/){$filename=126;}
			elsif($filename =~ /200707/){$filename=127;}


			$year{0}=199612;
			$year{1}=199701;
			$year{2}=199702;
			$year{3}=199703;
			$year{4}=199704;
			$year{5}=199705;
			$year{6}=199706;
			$year{7}=199707;
			$year{8}=199708;
			$year{9}=199709;
			$year{10}=199710;
			$year{11}=199711;
			$year{12}=199712;
			$year{13}=199801;
			$year{14}=199802;
			$year{15}=199803;
			$year{16}=199804;
			$year{17}=199805;
			$year{18}=199806;
			$year{19}=199807;
			$year{20}=199808;
			$year{21}=199809;
			$year{22}=199810;
			$year{23}=199811;
			$year{24}=199812;
			$year{25}=199901;
			$year{26}=199902;
			$year{27}=199903;
			$year{28}=199904;
			$year{29}=199905;
			$year{30}=199906;
			$year{31}=199907;
			$year{32}=199908;
			$year{33}=199909;
			$year{34}=199910;
			$year{35}=199911;
			$year{36}=199912;
			$year{37}=200001;
			$year{38}=200002;
			$year{39}=200003;
			$year{40}=200004;
			$year{41}=200005;
			$year{42}=200006;
			$year{43}=200007;
			$year{44}=200008;
			$year{45}=200009;
			$year{46}=200010;
			$year{47}=200011;
			$year{48}=200012;
			$year{49}=200101;
			$year{50}=200102;
			$year{51}=200103;
			$year{52}=200104;
			$year{53}=200105;
			$year{54}=200106;
			$year{55}=200107;
			$year{56}=200108;
			$year{57}=200109;
			$year{58}=200110;
			$year{59}=200111;
			$year{60}=200112;
			$year{61}=200201;
			$year{62}=200202;
			$year{63}=200203;
			$year{64}=200204;
			$year{65}=200205;
			$year{66}=200206;
			$year{67}=200207;
			$year{68}=200208;
			$year{69}=200209;
			$year{70}=200210;
			$year{71}=200211;
			$year{72}=200212;
			$year{73}=200301;
			$year{74}=200302;
			$year{75}=200303;
			$year{76}=200304;
			$year{77}=200305;
			$year{78}=200306;
			$year{79}=200307;
			$year{80}=200308;
			$year{81}=200309;
			$year{82}=200310;
			$year{83}=200311;
			$year{84}=200312;
			$year{85}=200401;
			$year{86}=200402;
			$year{87}=200403;
			$year{88}=200404;
			$year{89}=200405;
			$year{90}=200406;
			$year{91}=200407;
			$year{92}=200408;
			$year{93}=200409;
			$year{94}=200410;
			$year{95}=200411;
			$year{96}=200412;
			$year{97}=200501;
			$year{98}=200502;
			$year{99}=200503;
			$year{100}=200504;
			$year{101}=200505;
			$year{102}=200506;
			$year{103}=200507;
			$year{104}=200508;
			$year{105}=200509;
			$year{106}=200510;
			$year{107}=200511;
			$year{108}=200512;
			$year{109}=200601;
			$year{110}=200602;
			$year{111}=200603;
			$year{112}=200604;
			$year{113}=200605;
			$year{114}=200606;
			$year{115}=200607;
			$year{116}=200608;
			$year{117}=200609;
			$year{118}=200610;
			$year{119}=200611;
			$year{120}=200612;
			$year{121}=200701;
			$year{122}=200702;
			$year{123}=200703;
			$year{124}=200704;
			$year{125}=200705;
			$year{126}=200706;
			$year{127}=200707;

#################################################################################
	
			#アドレスを順に読み込む
			while($_=<NET>){
				#アドレスが記述されている行の判断（「(数字)　"アドレス"」から始まる）
				if($_ =~ /^[0-9]+ "[a-zA-Z0-9\.\-\_\$\*]+\@[a-zA-Z0-9\.\-\_\*]+"/){
					#"アドレス"の取り込み
					@nameline = split(/ /,$_);
					$old = $nameline[0];
					$nameline[1] =~ s/\n//g;
					#print "$filename$filename\n";
					#以前に登録したかどうか
					if($key{$nameline[1]}){								#前に存在する
						if(length($data[$key{$nameline[1]}][$filename]) == 0){
							$data[$key{$nameline[1]}][$filename] = 0;
						}						
						#$newold{$old} = $key{$nameline[1]};
						#$groupid{$key{$nameline[1]}} = ($newid << $k) + $groupid{$key{$nameline[1]}};
						#print "aaaaaaaaaaaa	$key{$nameline[1]}	$filename	$data[$key{$nameline[1]}][$filename]\n";
						$data[$key{$nameline[1]}][$filename] = ($newid << $k) + $data[$key{$nameline[1]}][$filename];
					}
					else{												#初めて出てきた
						$j++;
						#アドレス=>新IDのハッシュ
						$key{$nameline[1]} = $j;
						#print $j;
						$name{$j} = $nameline[1];
						#$newold{$old} = $j;
						#$groupid{$j} = ($newid << $k);
						#my $gip3 = sprintf "%b", $groupid{$j};
						$data[$key{$nameline[1]}][$filename] = ($newid << $k);
						#print "aaaaaaaaaaaa	$key{$nameline[1]}	$filename	$data[$key{$nameline[1]}][$filename]\n";
						
					}
					#print "k=$k\n";
					#print "$key{$nameline[1]}	$nameline[1]	$filename	$data[$key{$nameline[1]}][$filename]\n"
					#print "	$groupid{$key{$nameline[1]}}	$key{$nameline[1]}	$nameline[1]";
				}
			}
			close(NET);
		}
	}
	my $l;
	my $m;
	
	open DATA, ">>Database.txt" or die "cannot open savefile.\n";
	for($l=1; $l<=$j; $l++){
		print DATA join('',"\n$l	$name{$l}	");
		for($m=0; $m<=127; $m++){
			if(length($data[$l][$m]) == 0){
				$data[$l][$m]=0;
			}
			#print "$l	$m	$data[$l][$m]\n";
			$gip3 = sprintf "%b", $data[$l][$m];
			print DATA join('',"$gip3	");
		}
		#print "\n";
	}
	close(DATA);
}