|
2005/04/02 追記 九死虫 氏が自分の書いたperlスクリプトをブラウザでも使用できるように改良してくれました。 データのテーブルタグを吐き出すのはもちろん、グラフ出力がブラウザで行えます。 九死虫 氏のサイトのコンテンツ、「純Aを愛でる会」の データを取った時のテーブルタグ吐き出し(ジャグ用)改 のページです。オススメです。 |
|
|
#!/usr/bin/perl
# ジャグテーブルタグ吐き出し(cgi)から作成した html を読み込んで
# png 画像ファイル(出玉推移グラフ)を作成する。
use GD::Graph::lines;
use GD::Text::Align;
GD::Text->font_path('c:/windows/fonts');
use GD::Graph::colour;
print "date?\nexample : 2005/01/01\n";
chomp($date=<STDIN>);
print "\nWhat is the name of reading html file?\n";
chomp($file=<STDIN>);
# ファイルの読み込み
open(F, "$file") or die "Can't open...";
@data = <F>;
close(F);
# データの抜き出し
for (@data) {
if(/<td><font color='red'><b>777<\/b><\/font><\/td><td>(\d+)<\/td><td>.*<\/td><td>.*<\/td><td>(\d+)<\/td>/) {
push(@get, $1); push(@game, $2); push(@flag,'b');
$t_bigget += $1; $bigcount++;
} elsif(/<td><b>REG<\/b><\/td><td> <\/td><td>.*<\/td><td>.*<\/td><td>(\d+)<\/td>/) {
push(@get,'112'); push(@game,$1); push(@flag,'r');
$regcount++;
} elsif(/<td>ヤメ<\/td><td> <\/td><td>.*<\/td><td>.*<\/td><td>(\d+)<\/td>/) {
push(@get, 0); push(@game, $1); push(@flag, 'end');
} elsif(/プレイ数<\/td><td align='right'>(\d+)<\/td><td> <\/td><td bgcolor='.+'>投資<\/td><td align='right'>(.+) k<\/td>/) {
$t_play = $1; $toushi = $2;
} elsif (/<td bgcolor='.+'>回収<\/td><td align='right'>(\d+) 枚<\/td><td bgcolor='.+'>連荘率/) {
$lastcoin = $1;
}
}
$base = ($t_bigget + $regcount*111.043 + $toushi*50 - $lastcoin)/$t_play if $t_play; # 通常時 1P 当たりのコイン減
# 1P毎の保持コインを計算する。他にうまい方法が思いつかん…。
@data_play = @data_coin = (0);
for ($i=0; $i<=$#flag; $i++) {
if ($flag[$i] ne 'end') {
# ボーナスを引くゲームまでの間のコイン減
for($j=($play+1);$j<=($game[$i]-1);$j++) {
$coin -= $base;
push(@data_play, $j);
push(@data_coin, int($coin));
}
# んでボーナス分のコイン増
$coin += $get[$i]; $play = $game[$i];
push(@data_play, $play);
push(@data_coin, int($coin));
} else { # ヤメ時
for($j=($play+1); $j<=($game[$i]); $j++) {
$coin -= $base;
push(@data_play, $j); push(@data_coin, int($coin));
}
$play = $j-1;
}
}
print "calculating...\n";
# グラフ縦軸(コイン)の min , max
$max = ( sort{ $b <=> $a } @data_coin)[0];
$min = ( sort{ $a <=> $b } @data_coin)[0];
$max2 = int(($max + 999) /1000) * 1000;
$min2 = int(($min - 1000)/1000) * 1000;
$number = (abs($max2) + abs($min2)) / 1000;
@gr_data = ([@data_play],[@data_coin]); # グラフ作成に必要なデータ完成
# グラフの作成
$graph=new GD::Graph::lines(400,300);
$graph->set_x_label_font('msgothic.ttc', 10);
$graph->set_y_label_font('msgothic.ttc', 10);
$graph->set_x_axis_font('msgothic.ttc', 10);
$graph->set_y_axis_font('msgothic.ttc', 10);
$graph->set_text_clr(black);
$graph->set(
title => "JUG Data $date",
dclrs =>[ qw(blue) ],
borderclrs =>[ qw(blue) ],
r_margin =>25,
two_axes =>1,
types =>['bars','linespoints'],
x_label =>'PLAY',
y_label =>'COIN',
box_axis =>1,
bar_spacing =>1,
line_width =>3,
x_label_skip =>"$t_play",
long_ticks =>1,
y_max_value => $max2,
y_min_value => $min2,
y_tick_number=> $number,
);
$gd=$graph->plot(\@gr_data);
$date =~ s/\//_/g;
$date = 'jug' . $date;
# 画像出力
open(IMG, ">$date.png");
binmode IMG;
print IMG $gd->png;
close(IMG);
print "\nBIG $bigcount, REG $regcount\n";
print "play $t_play, get $lastcoin coins.\n\n";
print 'Completed.';
exit;
|