##################################################################################### # # 攻城戦のログ集計用perlスクリプト 0.5.0b # 22th Feb 2004 # # ActivePerl5.8.0 & WinXpProにて作成 # ファイル名が"ワールド名日付.csv"タブ区切りCSVファイル # を読み込み砦ごとの集計を行う。 # このファイル名はコマンドライン引数として与える。 # 処理を完結にするためファイル名はこの形式で決め打ち。 # # 19th Oct 2004 # レーサー集計作成用(テキストファイルに出力) # by 冬物語の人 in Lydia # http://winter.sgv417.jp/ # ###################################################################################### require 5.6.0; use strict; require './subkoujou.pl'; require './race.pl'; unless (@ARGV) { print "使い方 >perl main_race.pl worldyyyymmdd.csv\n"; print "詳しくは付属のドキュメント、コメントを参照のこと\n"; exit; } #砦別集計 my $LOG = shift; my $ajito_ref = hashAjito($LOG); #ファイル名生成 $LOG =~ s/(\w+\d{7})\.csv/\1/; #砦の集計結果を表示しつつギルド別集計 my %castellan; my $guild_ref = dispAjito($LOG, \%$ajito_ref, \%castellan); #ギルド別集計結果を表示しつつランキング集計 my (%rankCnt, %rankTotalTime, %rankLongestTime); dispGuild($LOG, $guild_ref, \%rankCnt, \%rankTotalTime, \%rankLongestTime); #城主リストの書き込み dispCastellan($LOG, \%castellan); #ランキングの表示 dispRanks($LOG, \%rankCnt, \%rankTotalTime, \%rankLongestTime, \%castellan); #レース計算 raceRanks($LOG, \%rankCnt, \%rankTotalTime, \%rankLongestTime, \%castellan); print "complete!.... \n"; # 砦主リストのハッシュの内容解析メモ # print %$castellan_ref; # my(@valuecast, @keycast); # @valuecast = values(%$castellan_ref); # @keyscast = keys(%$castellan_ref); # print "@valuecast\n"; # print "@keyscast\n"; #------------------------------------------------------------------------- sub raceRanks($$$$$) #レーサーランキング表示(落城回数集計) #第1引数: ログファイル名。このファイル名から書き込みファイル名を生成する。 #砦奪取回数、保持時間総合計、最長保持時間のそれぞれにてランキング表示 { my ($fileName, $cnt_ref, $total_ref, $long_ref, $castellan_ref) = @_; my $cnt; my $rankFile = 'result\\' . $fileName . '_race.txt'; open(FH, '>', $rankFile) or die "ランキング集計ファイル$rankFileが開けませんでした。\n"; print FH "レーサー集計 \($fileName\)\n\n"; #奪取回数ランキング print FH " 順位 回数 ギルド名\n"; $cnt = 1; for (sort{scalar($$cnt_ref{$b}) <=> scalar($$cnt_ref{$a})} keys %$cnt_ref) { printf FH "%3d位 ", $cnt++; printf FH "%2s回 ", $$cnt_ref{$_}; printf FH "$_"; if (isCastellan($_, $castellan_ref)) { # print FH "※\n"; print FH " "; my($fort, $guild, $temp, $flag); $flag = 0; while (($fort, $guild) = each(%$castellan_ref)) { ($guild, $temp) = split /<>/, $guild; # ギルド名だけを取り出す if ($_ eq $guild){ if ($flag == 1){ print FH ","; # 区切り文字 } if ($fort =~ /^(\w)(.+) (\w+) (\d)/){ $fort = $1.$4 } print FH "※$fort"; $flag = 1; # 次の砦の前にスペースを入れるための判定 } } print FH "\n"; } else { print FH "\n"; } } close(FH); } __END__