#!/usr/local/bin/perl ############################################################# # CTG(Counter To Graph)ver 0.0(2005/02/07製作) ############################################################# # # =機能= # # Apps Page(http://apps.cside.com/)さまが配布されている各種カウンタのログファイルを基に、 # 一日ごとのカウント数の推移が把握しやすい、グラフ(TXT形式のファイル)を生成します。 # # このスクリプトは、次項のプログラムの機能を拡張するものであり、 # これらによって出力されるログファイルが無い場合には、ご利用頂けません。 # # # =対応プログラム= # # 『テキストカウンタ』『テキストカウンタDX』『連結カウンタ』『連結カウンタDX』 # 〜(C) Apps Page(http://apps.cside.com/) All Rights Reserved.〜 # # # =利用方法= # # このファイルを保存しリネームしたものを、 # カウンタを設置しているディレクトリにアップロードして下さい。 # # スクリプトを呼び出すと、グラフ(TXT形式のファイル)を生成・表示します。 # # # =ファイル構成= # # ???cnt:『テキストカウンタ』などを設置しているディレクトリ # | # └ ctg.cgi(755?):このファイルを保存し、リネームして下さい。 # | # └ graph/:このスクリプトによって生成されるファイルを格納します。 # └ CTG_????????_??????.txt:ログファイルを基にしたグラフです。ファイル名は生成日時を表します。 # # # =利用規定= # # このスクリプトは、y_nagataが製作したものであり、 # 著作権などの権利は、特に表記の無い場合、全てy_nagataに帰属します。 # # 製作者は、このスクリプトの利用によって生じた不利益に対する一切の責任、およびサポートの義務を負わないものとします。 # # ★ご迷惑となりますので、このスクリプトに関して、Apps Pageさまに問い合わせすることの無いようにお願い致します。 # # # =製作者情報= # y_nagata(メール:ynagata@s21.xrea.com・HP:http://www3.to/y_nagata/) # # ############################################################# ############################################################# # 設定(全て必須です) ############################################################# # 1行目に、Perlの実行パスを指定して下さい。 # グラフ単位:"*"1個が何カウントを表すかを設定。デフォルト値は"5"。 $unit = 10; # 最大桁数:この桁数まで"0"を補完し、表示をきれいにします。デフォルト値は"5"。 $today_max_digit = 5; $total_max_digit = 6; ############################################################# # 設定は以上です。通常、以下を改変する必要はありません。 ############################################################# # 日時取得 ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time()); $year += 1900; $mon += 1; if ($mon < 10) { $mon = "0".$mon; } if ($mday < 10) { $mday = "0".$mday; } if ($hour < 10) { $hour = "0".$hour; } if ($min < 10) { $min = "0".$min; } if ($sec < 10) { $sec = "0".$sec; } # 各種変数格納 $data_dir = "data/"; $graph_file = "graph/CTG_".$year.$mon.$mday."_".$hour.$min.$sec.".txt"; # データ読み込み opendir(DIR, $data_dir) or die("Error!"); my $file; while( $file = readdir(DIR) ) { if($file =~ /^old_.*/) { push @files, $file; } } closedir(DIR); @files = (sort { $a cmp $b } @files); # 配列へデータを格納 for( my $loop_index = 0; $loop_index < @files; $loop_index++){#start for open(IN, '<'.$data_dir.$files[$loop_index]) or die("Error!"); $tmp = readline *IN; chomp($tmp); push @today, $tmp; $tmp = readline *IN; $tmp = readline *IN; chomp($tmp); push @total, $tmp; $tmp = readline *IN; chomp($tmp); push @dates, $tmp; close(IN); }#end for # 1行ごとにファイルへ書き込み for (my $loop_index = 0; $loop_index < @files; $loop_index++){#start_for my $number = int( ( $today[$loop_index] + $unit - 1 ) / $unit ); my $count = 0; for (my $inner_index = 1; $inner_index < $today_max_digit; $inner_index++){#Start_for if ($today[$loop_index] < 10 ** $inner_index) { $count++; } } $today[$loop_index] = "0" x $count . $today[$loop_index]; $count = 0; for (my $inner_index = 1; $inner_index < $total_max_digit; $inner_index++){#Start_for if ($total[$loop_index] < 10 ** $inner_index) { $count++; } } $total[$loop_index] = "0" x $count . $total[$loop_index]; $dates[$loop_index] =~ s/(\d\d\d\d)(\d\d)(\d\d)/$1\/$2\/$3/g; $add = join("\t","$total[$loop_index]","$dates[$loop_index]","$today[$loop_index]","*" x $number); $add = "$add"."\n"; open (OUT, ">>".$graph_file) or die("Error!"); print OUT "$add"; close (OUT); }#end for # ファイル末尾に文字列を書き込み open (OUT, ">>".$graph_file) or die("Error!"); print OUT "\n\"*\"1個が、".$unit." アクセス(またはそれ未満の値)を表\します。\n\nGenerated by \"CTG ver 0.0\"(http://www3.to/y_nagata/)."; close (OUT); # 生成したファイルを表示 print "Location: $graph_file\n\n"; # EOF