#wpa2 Pre Processer---------------------------------------
$wpa2_dir = ".";
$pp_dir = "./pp_namini";
$from_pp_to_wpa2_path = "..";
#設定部はここまで-----------------------------------------
=pod
=head1 wpa2_pp 1.0
wpa2の補助用Perlスクリプトです。
もしかしたら作業が速く済む…かも。
=head2 wpa2について
wpa2に付属のREADME.txtより引用させていただきます。
I<WPA2は「汝は人狼なりや?」続わかめてサーバ
(L<http://jinrou.dip.jp/~jinrou/>)用の個人勝率集計ソフトウェアです。>
作成者は☆ ◆LC7P44pfbgさんです。
L<http://www.geocities.jp/lc7p44pfbg/index.html>にて入手できるようです。
=head2 Perlについて
プログラミング言語のひとつです。詳細は L<http://www.perl.com/>
もしくは L<http://ja.wikipedia.org/wiki/Perl> を参考にしてください。
=head1 使い方
これ以降の解説はwpa2とPerlについての知識を前提にしています。
=over
=item 0.indexファイル全てに読み取り専用属性を設定して下さい(推奨)
=item 1.wpa2用フォルダ内にppフォルダを作成して下さい
=item 2.ppフォルダ内にwpa_configure.txtをコピーして下さい
=item 3.wpa2_pp.plをwpa2用のフォルダにおいて下さい
=item 4.wpa2用フォルダ内でwpa2_pp.plを実行してください
=back
=head2 動作
=over
=item 1.ppフォルダ内にindex_village_dataフォルダを作成します
=item 2.ppフォルダ下のindex_village_dataフォルダ内に
ppフォルダ下のwpa_configure.txt向きに特化したindexファイルを作成します
=item 3.ppフォルダからwpa2.exeを呼び出します
=item 4.終了します
=back
=head1 その他
=head2 謝辞
=over
=item wpa2の作成者☆ ◆LC7P44pfbgさん
=item 続わかめて運営者のココアさん
=item ココアさんなどを支えるサブ運営者のみなさん
=item 出会えたプレイヤーのみなさん
=back
ありがとうございます。
=head2 連絡
2chの汝は人狼なりや関係スレッドにてwpa2_ppの名前を出していただければ
検索で気づけるかも…です。
=head2 お断り
使用は自己責任でよろしくお願いします。
=head2 展望
=over
=item 複数のppフォルダを逐次処理したい
=item 既に作成された特化indexファイルがあれば活用したい
=item バグがあれば見つけたい
=item 良いスクリプトアップロード場所を見つけたい
=item PODの書き方をなんとかしたい
=back
=head2 履歴
=over
=item v1.0 2008/04/01 組んで見たら意外とあっさりいったので公開
=back
=cut
#説明はここまで-------------------------------------------
&print_time("start and configure open");
&init(\%argv, @ARGV);
&pp() if exists $argv{pp};
&marge() if exists $argv{marge};
exit;
sub marge{
die @_;
}
sub init{
my ($argv, @argv) = @_;
%fn = (
'cfg' => 'wpa_configure',
'pl' => 'wpa_players',
'plr' => 'wpa_players_rev',
'idx' => 'wpa_index',
'tt' => 'wpa_titles',
'vt' => 'wpa_votes',
'cmd' => 'wpa_commands',
'ivd' => 'index_village_data',
);
foreach(@argv){
if(/-(\w+)/i){
$key = lc $1;
@{$argv->{$key}} = ();
}else{
push @{$argv->{$key}}, $_;
}
}
if($#argv == -1 or exists $argv->{h}){
system 'perldoc', $0;
die;
}
$pp_dir = $argv->{dir}->[0] || $pp_dir;
$wpa2_dir = $argv->{path}->[0] || $pp_dir;
$read_dir = "$wpa2_dir/$fn{ivd}";
$write_dir = "$pp_dir/$fn{ivd}";
# print %argv;
}
sub pp{
die "pp ok";
mkdir $write_dir;
&print_time("configure open");
open CFG, "<$pp_dir/$fn{cfg}.txt" or die;
while(($_ = <CFG>) ne undef){
if(/^(\w+)[\s\t]+(.*)/){
push @{$cfg{$1}}, $2;
}
}
$query = join '|', map{"(" . (quotemeta $_) . ")"}@{$cfg{'handle_name'}};
close CFG;
&print_time("players open");
open PL, "<$read_dir/$fn{pl}.txt";
push @pl_txt, scalar <PL>;
while(($_ = <PL>) ne undef){
($num, $name) = /^(\d+)\t(.*)$/;
$name[$num] = $name;
if($name =~ /$query/){
$pl{$num} = 1;
print "handle found:$num - $name\n";
}
}
close PL;
#print "players max:$num\n";
&print_time("players_rev open");
open PLR, "<$read_dir/$fn{plr}.txt";
push @plr_txt, scalar <PLR>;
while(($_ = <PLR>) ne undef){
($num, $plr) = /^(\d+)\t(.*)$/;
$plr[$num] = $plr;
if(exists $pl{$num}){
map{$plr{$_} = 1;}split /\t/, $plr;
}
}
close PLR;
#print "plr max:$num\n";
&print_time("index open");
open IDX, "<$read_dir/$fn{idx}.txt" or die;
open PP, ">$write_dir/$fn{idx}.txt" or die;
print PP scalar <IDX>;
while(($_ = <IDX>) ne undef){
($vlg, $idx) = /^(\d+)\t(.*)$/;
if(exists $plr{$vlg}){
($pl, $rol, $die, $day) = (split /\t/, $idx);
$pl2{$pl} = 1;
print PP "$vlg\t$idx\n";
}
}
close IDX;
close PP;
#print "index max:$vlg\n";
foreach$filename(@fn{tt, vt, cmd}){
&vlg_serch($filename);
}
&print_time("players and players_rev write");
open PL, ">$write_dir/$fn{pl}.txt" or die;
open PLR, ">$write_dir/$fn{plr}.txt" or die;
print PL @pl_txt;
print PLR @plr_txt;
foreach$num(sort{$a<=>$b}keys %pl2){
print PL "$num\t$name[$num]\n";
next unless exists $pl{$num};
print PLR join("\t", $num, grep{exists $plr{$_}}(split /\t/, $plr[$num]));
print PLR "\n";
}
close PL;
close PLR;
chdir $pp_dir;
&print_time("wpa2 Pre Process end and start wpa2, good luck.");
system "$from_pp_to_wpa2_path/wpa2.exe";
exit;
}
sub vlg_serch{
my $filename = shift @_;
&print_time("$filename open");
open DT, "<$read_dir/$filename.txt" or die;
open PP, ">$write_dir/$filename.txt" or die;
print PP scalar <DT>;
while(($_ = <DT>) ne undef){
($vlg, $dt) = /^(\d+)\t(.*)$/;
if(exists $plr{$vlg}){
print PP "$vlg\t$dt\n";
}
}
close DT;
close PP;
# print "$filename max:$vlg\n";
}
sub print_time{
printf "%2d/%2d %2d:%02d:%02d :$_[0] time\n", (reverse localtime)[4..9];
}
#wpa2 Pre Processer------------------------------------end/
__END__
おまけ
perl -e"open G,'<wpa_players.txt';while(<G>)
{@g=split/\t/;$p{$g[0]}=$g[1]}open F,'<wpa_players_rev.txt';while(<F>){@f=split/
\t/;$n{$f[0]}=$#f}print map{qq/$n{$_}\t$p{$_}/}sort{$n{$b}<=>$n{$a}}keys%n">test
.txt
最終更新:2008年05月31日 20:03