HomePage講座     Yukiの休息所
 Yukiの休息所(趣味の部屋)
 ホームページ講座
 CGI別枠講座
次の項目へ>>
<<前の項目へ

CGI、便利ですよね、でも扱い方が大変、用語も難しい。

 基礎講座では、フリーで公開されている有名なソフトを紹介しました。
 応用講座では、CGIの自作を目指す方の為に、Perlを使った作成方法を紹介しました。

  ここでは、自作CGIを設置する方法を紹介します。

 CGIで何を作るかより、自作の参考物件を求めている方に、改造方法も紹介したいと考えてます。

 ダウンロードは、[旅の思い出写真集]  いつもの場所。

 CGIツール、CalendarVer2.0、別ページに表示してあります。

 今回は、カレンダー、今後、バージョンアップしていきますが、 ファイルが大きくない今のうちに設置方法など解説しておきます。色々と改造して見てください。

    
 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] = "&nbsp;";}
 節気データは、先に122行目で、すべて”&nbsp;”で初期化してありますが、 データは、0〜31までしかありませんので、

 日付が無い場合、日付データを利用して、”&nbsp;”を書き込む、
 その他は、節気データを順に日付通りに書き込むだけです。
 
   
 ”&nbsp;”は、空白を書き込む特殊文字、表が崩れないように書き込みます。
 このバージョンは節気データだけですが、他のデータを追加する場合は、 節気データに、追加していけば、いくらでも増やせるんです。

 つまり、$sdata[$t] .= 追加データとすれば、追加できることになります。
 
 
 
   
 少し戻って、日付の作成部分です。

 祝日判定に、当日判定と4つに分かれてます。
 それぞれ、色を変えてCalendarらしくする為ですが、 事前にファイルからすべて、メモリに読み込んでからの一括処理なので、処理は極短時間で終了します。

 高速化は、出来るだけ、ファイルのオープン処理の回数を減らす事ですね。

 セルの色、文字の色、すべて、設定変更対象なので、変数ばかりになって、コードは、 見難いのですが、

 英語にローマ字、それにタグ文字、どれもアルファベット、

 サブルーチン呼出に、&を付けてますが、省略も可能な様ですね、 分かりにくいコードにならない為につけてます。
 
   今回で、コード解説は終了とします。

 じつは、プログラムが大きくなりすぎて、解説が大変になってきました。
 今後のプログラムには、極力コメント行を増やしていきますので、 ダウンロードしたら、コメントを見ながら解析して見て下さい。

 他人のプログラムを解析して、利用できる部分を流用する、これは、パクリではありません。
 お互いに、便利なルーチンを利用しあう事で、技術が向上していくんです。

 次回以降は、CGI作成に役立つツール&文例の紹介など、順次追加していきます。

 CGI別枠講座第7回は、これで終了です。