#
#	ニュースのメーリングリストのmboxアーカイブ（全期間）を月ごとに分断するプログラム
#		author	akinori-i
#		
#		◇入力
#			mbox形式のニュースメールアーカイブ（全期間）
#
#		◇出力
#			関係リスト、もしくは、Pajek形式データ
#
#		◇使用法
#			コマンドラインで、以下のコマンドをたたく(要 Perl 5 以上)
#			perl getRelation.pl [filename1,filename2,...]
#			
#				引数
#					filename	mboxファイル、指定しなければ標準入力から読み込む
#								複数指定した場合は、mboxをマージしてから読み込む
#

use Strict;

#変数宣言
my %mapping_email_msgid;	#メッセージIDからメールアドレスを得るための対応ハッシュ
my %relation;				#レス関係の対応ハッシュ(2次元ハッシュ)
my $filename;				#引数に与えられたファイル名を保存する

my %parentnum;				#親記事を作成した数

my $mailsplitter = '^From ';	#メールの区切りを示す正規表現

%month = (
      "Jan" => "01",
      "Feb" => "02",
      "Mar" => "03",
      "Apr" => "04",
      "May" => "05",
      "Jun" => "06",
      "Jul" => "07",
      "Aug" => "08",
      "Sep" => "09",
      "Oct" => "10",
      "Nov" => "11",
      "Dec" => "12",
); 


&parse();					#parseする
exit;




################################################################################
#以下サブルーチン群

#===============================================================================
#	parse
#		mailboxをparseする
sub parse {
	my $from;				#差出人メールアドレス
	my $message_id;			#メッセージID
	my $in_reply_to;		#返信元メッセージID
	
	#データがファイルで与えられた場合、ファイルに出力するためファイル名を覚えておく
	if($ARGV[0]) {
		$filename = $ARGV[0];
	}
	
	$date = "";
	@mail = ();
	#下の<>はファイルの入力待ち
	while (<>) {
		#メールの区切りがあれば
		if ($_ =~ /^From .*\@.*(200\d)\n/) {
			if($date != ""){
#				print "aaaaaaaaaaaaaaa$date\n";
				open DATA, ">>$filename.$date" or die "cannot open savefile.";
				$fh = DATA;
				print $fh join ('', @mail);
				close $fhc;
			}
			# 古いメールが終了
			#  ↓
			# 古いメールをファイルに書き出す
			#    ー古いメールの日付に対応したファイルをオープン
			#    ー@mailを書き出す
			
			# -------
			# Newメール開始
			# @mail を初期化
			
			#print "@mail";
			@mail= ();
			#print "$_";
			# Newメールの日付を読んでおく
			@from = split(/ /,$_);
			$from[6] =~ s/\n//;
			$date =$from[6] . $month{$from[3]};
			#print "$date \n"; 
		}
		
		#From:行であれば
		#elsif($_ =~ /^From:/){
			#push(@mail,$_);
		#}
		
		#Reference行であれば
		elsif ($_ =~ /^References:/) {
			@replies = split(/ /,$_);
			$in_reply_to = $replies[$#replies];
			$_ = "In-Reply-To: " . $in_reply_to;
			#push(@mail,$_);
		}

		#Message-IDであれば
		#elsif($_ =~ /^Message-ID:/){
			#push(@mail,$_);
			#print "aaaaaaaaaaaaa"; 
		#}

		#In-Reply-Toを消去
		elsif($_ =~ /^In-Reply-To:/){
			next;
		}
		
		push(@mail,$_);
	}
	
	#最後の月だけはきだされてないためここではきだす
	open DATA, ">>$filename.$date" or die "cannot open savefile.";
	$fh = DATA;
	print $fh join ('', @mail);
}

#eof
