使用しているCGIについて

List Splitter リスト切り分け用スクリプト (perl:CGI)
使用場所

やっていることは、htmlファイルのリストから個別の項目を切り出して、それぞれ別ファイルに仕立てあげるということです。
用語集とかは、それぞれの項目の意味を知るということもあるのですが、最初からだらだらと読んでいくというのが好きなもので。それぞれの作者のフィロソフィーみたいのが出ているから、他の人の編んだ用語集も読み物として愉しんでいるし、自分のもそのように読んで貰いたいと思っています。項目直行派の人と最初からだらだら派の人の両方に愉しんで貰おうというのが、このスクリプトを作ろうと思った動機です。
あと、項目別にhtmlファイル作っていたらファイル管理が面倒というのもあるんですが、それは裏事情ということで。

もともとhtmlでリストを作っていてそれを用途に応じて切り出すという発想なので、データの更新は普通に対象のhtmlファイルを更新することになっています。スクリプト自体にはデータの追加、更新機能はありません。既存ファイルを切り出すだけです。
切り出しなんですが、切り出す最初と最後にhtmlのコメント行をぶち込んでデータ・フィールドを明示しています。


<!--key=header-->
<!--key=KEYWORD1-->
用語1のヘッダー
<!--key=KEYWORD1-->
<!--key=KEYWORD2-->
用語2のヘッダー
<!--key=KEYWORD2-->
<!--key=header-->
<DL>
<!--key=KEYWORD4-->
       <!--key=KEYWORD1-->
       <DT> <a name="KEYWORD1">用語1
       <DD> 解説
                <DL>
                <DT> 入れ子タイトル1
                <DD> 入れ子データ
                </DL>
       <!--key=KEYWORD1-->
       <!--key=KEYWORD2-->
       <DT> <a name="KEYWORD2">用語2
       <DD> 解説
              <BR><a href="#KEYWORD1">参考</a>
       <!--key=KEYWORD2-->
<!--key=KEYWORD4-->
       <!--key=KEYWORD3-->
       <DT> <a name="KEYWORD3">用語3
       <DD> 解説
       <!--key=KEYWORD3-->
</DL>
<!--key=footer-->
<!--key=KEYWORD1-->
用語1のフッター
<!--key=KEYWORD1-->
<!--key=KEYWORD2-->
用語2のフッター
<!--key=KEYWORD2-->
<!--key=footer-->

というデータ仕様になっていて、KEYWORDがマッチしたら再び同じKEYWOEDが出てくるまでprintで出力という処理をします。
リストを読みとって番兵に仕立ててもよかったのですが、リストが入れ子になっているときがめんどうなので、別途挿入しました。番兵を自由に入れれるようになったことで、テーブルの行を切り出すとか、もっと言うとhtmlの任意の部分を自由に切り出すことが出来ます。また、上の例ではKEYWORD4を指定すると用語1と用語2をまとめて出力することが出来ます。
htmlのコメント行なので、htmlファイル全体を出力したときにも支障はでません。"key="で番兵かどうかを判断するので、それ以外のコメントももちろん書き込めます。行毎に処理していくので、番兵となるコメントは独立した行である必要があります。

あと、元のファイルではnameタグを入れてファイル内で相互参照できるようにしてあったのですが、これをファイル間での参照に置き換えたりという細工もしてあります。
headerとfooterを設定することも出来ます(リストの始まる前と後ろ)。設定のない場合は、リストの始めと終わりのチェックをして、スクリプトが持っている既存のヘッダとフッターを使うことになります。

3年ぶりぐらいにperlでスクリプトを書いてみました。リハビリもかねて。
プログラム自体はすぐに組めたのですが、なかなかマッチングしてくれなくて、改行記号の処理をしていないことが原因と気が付くまで結構時間を消費しました。本処理前に改行記号を取り除いておくというのは常識なんだろうけど‥‥とほほ。


このページはCGI作成にあたっての個人的記録が目的です。
間違いや改善点の指摘、スクリプトについての問い合わせは歓迎します。スクリプトの開示または配布については、個別に問い合わせてください。

E-mail:TTS