CGI,別枠講座、第7回 |
|
今回は、節気データを表示するCalendar、Schedulerへのステップです
自作ツールテストページ
このPageに設置してあります。
設置は、簡単、ソースで確認してください。
<SCRIPT type="text/javascript" src="cgi/calendar/calendar2.cgi?">
</SCRIPT> |
|
今回も、カレンダーです、今回は、節気データを表示するCalendar、
Calendarに表示するデータなら何でもOK、節気データと差し替えれば表示できます。
CGIの解説も7回目を数えるので、焦点をデータ表示に絞って解説します。
|
|
まずは、曜日の計算(Zellerの公式)、これは便利、
前回も使ってましたね。
コードは、前回の分を参照してください。
97行目は、月の日数を算出する部分、これも公式がありますね。
100行目、週の数は、ここで、切り上げ計算をしています。
use POSIX; #POSIXモジュール(切り上げ)
このモジュールが必要です。
103行目から、日付データの作成、横列に曜日、縦列に週の数、
これで2重ループを廻して、日付の位置を決定し、その他には”--”を入れておきます。
118行目からは、休日表の読み込み、このデータは、セルと文字の色データに使用します。
|
|
|
|
休日表データは、この様なテキストを使用しています。
区切り文字は、数字の切り分けだけですから、何でも良いのですが、
”/”が、日付らしくて良いですね。
#休日表のチェック
foreach (@temp) {
local($y, $m, $d) = split(/\//,$_);
#該当データを設定
if ($y == $year and $m == $month) {
push(@kyuujitu, $d);}
}
}
休日表の読み込みは、こんな感じでOKです。
@kyuujituという、配列に該当データを抽出してから、書き込んでます。
$y、$m、つまり、年と月が一致する日を抽出するんです。 |
|
|
|
次は、122行目から、節気データの読み出し。
節気データは、日本語文字を含みますので、
日本語文字の後ろにも”/”を入れてあります。
休日表の方も最後に”/”を入れてありますが、
これは、データの形式をあわせるために入れただけで、入れなくても問題ありません。
日本語の場合、内部処理に日本語コードを使用して分解しています、
このコードが”/”が無いと、区切り位置が分からなくなる原因になるようです。
尚、休日表・節気データは、簡単な計算では計算誤差が出てしまう場合あり、
よって、国立天文台 天文情報センター 暦計算室の計算が公表される日以降に更新する事にします。
これの公表は、毎年2月中旬に次年の分が公表されます。
|
|
|
|
305行目からが、節気データの読み出し部分。
データを年・月・日・節気に分離してから、年月が適合するデータを、
ハッシュ配列に読み出します。
この場合、数値データではない為、通常配列ではダメなんです。
取り出すときに、日付が合致したら、関連する節気データを使用するわけですね。
#初期化
for ($i = 0; $i < 32; $i++){$sdata[$i] = " ";}
節気データは、先に122行目で、すべて” ”で初期化してありますが、
データは、0〜31までしかありませんので、
日付が無い場合、日付データを利用して、” ”を書き込む、
その他は、節気データを順に日付通りに書き込むだけです。 |
|
|
|
|
|
” ”は、空白を書き込む特殊文字、表が崩れないように書き込みます。
このバージョンは節気データだけですが、他のデータを追加する場合は、
節気データに、追加していけば、いくらでも増やせるんです。
つまり、$sdata[$t] .= 追加データとすれば、追加できることになります。
|
|
|
|
少し戻って、日付の作成部分です。
祝日判定に、当日判定と4つに分かれてます。
それぞれ、色を変えてCalendarらしくする為ですが、
事前にファイルからすべて、メモリに読み込んでからの一括処理なので、処理は極短時間で終了します。
高速化は、出来るだけ、ファイルのオープン処理の回数を減らす事ですね。
セルの色、文字の色、すべて、設定変更対象なので、変数ばかりになって、コードは、
見難いのですが、
英語にローマ字、それにタグ文字、どれもアルファベット、
サブルーチン呼出に、&を付けてますが、省略も可能な様ですね、
分かりにくいコードにならない為につけてます。
|
|
今回で、コード解説は終了とします。
じつは、プログラムが大きくなりすぎて、解説が大変になってきました。
今後のプログラムには、極力コメント行を増やしていきますので、
ダウンロードしたら、コメントを見ながら解析して見て下さい。
他人のプログラムを解析して、利用できる部分を流用する、これは、パクリではありません。
お互いに、便利なルーチンを利用しあう事で、技術が向上していくんです。
次回以降は、CGI作成に役立つツール&文例の紹介など、順次追加していきます。
CGI別枠講座第7回は、これで終了です。 |