HTML Creator
シェアウェア
制作者:秀麗 - Labyrinthe Noir - e-mail
Text2HTML v1.5以降に追加された機能を紹介します。
新しいリピート範囲の自動切換機能や、項目切換機能に条件を付加した機能など、ユーザーマニュアル(Manual.html)では紹介できなかった使用例を補足説明いたします。
単純なデータを出力してそれを様々に加工したい場合に、新しい機能は効果を発揮するでしょう。そのためには、データを出力する段階の準備も重要です。
複雑な条件によって出力ファイルに変化を持たせることを目的に機能を追加していまが、データベースや表計算ソフトの機能を十分に活用して、出力前に計算や条件式によってデータの内容を準備した上で、補完的に使用してください。
使用するサンプルファイルは「sample2」フォルダに入っています。
一部の機能を変更した結果、設定ファイルにも変更箇所があります。
1.処理用テキストファイルの保存位置記録方法を変更しました。
既存の設定ファイルを一旦読み込み、v1.5以降のText2HTMLで上書き保存を行うことで新しい記録方法が有効になります。ファイルをエイリアスレコードで記録するため、ファイル名の変更やフォルダの位置を変更しても自動的に追跡が可能になっています。
旧バージョンの設定ファイルを読込できる代わりに、旧バージョンでv1.5以降の設定ファイルを正しく読み込むことができません。
2.専用コードの変更を制限しました。
これまでは、専用コードを自由に改変して設定ファイルにその記録を行っていました。
しかし、専用コードの種類が増え、Preferenceで全てを表示することも難しくなり、また機能としてどこまで必要なのかと考えて見直すことにしました。
コードを改変する目的は、1つのデータを複数のテンプレートで何重にも処理を重ねることができるようにするためです。そのような場合、テンプレート毎に専用コードの形を変える必要がありました。しかし、コードの命令を決める部位「$_repeat;」の「repeat」の部分を変更することは、テンプレートの作成上煩雑な作業を増すだけで、「$_」や「;」のコードの識別に使用する部位を変更することによって専用コードに変化を持たせることができれば十分ではないかと考えられます。
そこで、この前後の専用コードを識別する部位のみ一括して変更して扱うように機能を組み替えました。
Preferenceタブの画面では「$_N;」を例示して、「$_」と「;」の部分を変更可能にしていますが、この変更が全ての専用コードに適用されます。そのため、1つ1つの専用コードを手直しする手間を省いて、効率よく専用コードをカスタマイズできる方法を提供することができました。
設定ファイルには、上記の変更可能な部位のみ記録されます。また、読み込み時も同様の部位のみ読み込みます。 以前の専用コードの変更については設定ファイルから読込しないようになっていますので、設定を見直して上書き保存を行ってください。テンプレートも同時に見直しが必要です。
v1.5以前は、リピート範囲は1つしか使えませんでした。決まったパターンを繰り返すだけで、フィールドを変化させたり、項目切換機能を使ってパターンに変化を付けるしか方法がありませんでした。
新しいリピート範囲の切換機能は、リピート範囲を丸ごと差し替えてしまうもので、複数のパートを用意すれば自動的に切換を行うというものです。
記述: | $_repeat;(A)$_rnext;(B)$_rend; |
実例: | $_repeat;<TR COLOR=#FFAAAA><TD>$_5;</TD></TR> $_rnext;<TR COLOR=#AAAAFF><TD>$_5;</TD></TR> $_rend; ($_rnext;が新しい専用コードです。) |
【解説】
上記の例では赤と青の2つの行が交互に表示されます。$_rnext;は無制限に複数使用することができます。
$_rnext;を2つ使って3つのパターンを作った場合、3つが順番に出力されていきます。
これによって、一定行毎にパターンを切り換えることができます。
このメリットはデータベースからデータを出力した時点の並び順ではなく、実際にText2HTMLで処理する時点でパターンが決定されるという点です。そのため、データベースの出力時にパターンを設定する必要はなく、複雑な設定が不要です。
【サンプル】
使用ファイル: | address.csv, repeat_test.temp |
出力ファイル: | address.html |
フィールド設定: | Header: 4 Switch: 8 = 1 (特に設定しなくても良い) |
このサンプルでは3種類の繰り返しパターンが用意されています。各リピート範囲の区分は、行毎に色を赤、青、緑に変えることを目的としています。
Filedsタブに条件を設定します。ヘッダーは4番目の項目毎に挿入されます。切換機能には8番目の項目を使用し、これが「1」の場合は情報公開の許可とみなし、リンク先の出力や電話番号の表示を行います。
従来は、$_fsN;(A)$_fselse;(B)$_fsend;
(Nは任意のフィールド番号)の専用コードを使って、N番目の項目(フィールド)が空欄かどうかで表示する内容を切り換えていました。
この機能に追加して、新しく条件を記述して、その条件を満たすかどうかを判定して内容を切り換えることが可能になりました。
記述: | $_fsN[条件];(A)$_fselse;(B)$_fsend; |
条件: | 条件式と条件値で表します。条件値は比較する文字列または数値、条件式は比較の方法を示します。 |
条件式: |
条件式は文字列または数値での比較を明確に示さなければなりません。詳細はユーザーマニュアルのリファレンスをご覧下さい。 |
条件値: | 文字列または数値で示します。条件式との間にあるスペース(半角の空白)は自動的に削除されます。そのため、スペースを条件値にすることはできません。 |
実例: | $_fs3[eq 許可];<A HREF="link.html">$_fsend;リンク$_fs3[eq
許可];</A>$_fsend; (3番目の項目が「許可」という文字列ならば、「リンク」の前後にアンカータグが表示される。) |
実例: | $_fs8[>50];重量オーバー$_fselse;計量合格$_fsend; (8番目の項目が50を越える場合「重量オーバー」を表示し、50を越えない場合は「計量合格」を表示します。) |
実例: | $_fs1[eq USA];米国$_fsend;$_fs1[eq
Japan];日本$_fsend; (1番目の項目が「USA」なら「米国」と表示。また、「Japan」なら「日本」と表示。) |
実例: | $_fs1[eq Japan];日本$_fs8[=
1];国内$_fselse;国外$_fsend;$_fsend; (1番目の項目が「Japan」なら「日本」と表示し、更に8番目の項目が「1」かどうかで続く表示を切り換えます。) |
【サンプル1】
使用ファイル: | address.csv, FieldSwitch.temp |
出力ファイル: | address2.html |
フィールド設定: | Header: 4 Switch: 8 = 1 (特に設定しなくても良い) |
8番目の項目の内容に応じて表示を切り換える事例を見てみましょう。
サンプルの出力ファイルの「TEST」欄には「許可」「不可」という文字列が表示されています。
8番目の項目は切換機能(Switch)でもオン/オフを指定していますが、これと同じようにテンプレートの中に直接項目と内容を指定して切換を行うことができます。しかも、1つの項目だけでなく、複数の項目や複数の条件を扱うことができます。
ここでは条件は1つです。8番目の項目が「1」かどうかだけで切換を行います。
テンプレート内の記述は「$_fs8[=1];許可$_fselse;不可$_fsend;」となっています。
8番目の項目が「1」ならば、「許可」の文字列を出力し、それ以外ならば「不可」を出力します。このように条件を満たすことを「真」、満たさないことを「偽」と言います。
項目切換機能は、このように条件が真の場合、(A)を出力します。偽の場合は(B)を出力します。もし、「$_fselse;」がない場合は、条件が真のときだけ、「$_fsN[条件];」から「$_fsend;」の間の文字列を出力することになります。
【サンプル2】
使用ファイル: | address.csv, FieldSwitch2.temp |
出力ファイル: | address3.html |
フィールド設定: | Header: 4 Switch: 8 = 1 (特に設定しなくても良い) |
年齢(3番目の項目)に応じてメッセージを切り換えて表示させます。
サンプルの出力ファイルの「TEST」欄には年齢と条件によって出力された文字列が表示されています。
テンプレート内には「$_fs3[<=20];$_fs3[=20];二十歳$_fselse;未成年$_fsend;$_fselse;$_fs3[<30];30歳未満$_fselse;30歳以上$_fsend;$_fsend;」という記述があります。
見やすく整理すると、
┏ $_fs3[<=20];
┃┌ $_fs3[=20];
┃│ 二十歳
┃├ $_fselse;
┃│ 未成年
┃└ $_fsend;
┣ $_fselse;
┃┌ $_fs3[<30];
┃│ 30歳未満
┃├ $_fselse;
┃│ 30歳以上
┃└ $_fsend;
┗ $_fsend;
このようになります。外側の条件と2つの内側の条件がある、入れ子構造になっています。
これはプログラムのif文と同じ条件文として機能させることができます。更に入れ子構造にできることで、複雑な条件を選択させることが可能になりました。
まず、外側の条件を見てください。最初に「$_fs3[<=20];」とあります。3番目の項目が20以下の数値であることが条件として設定されています。この条件を満たす場合「$_fselse;」までの部分を、条件を満たさない場合「$_fselse;」より後の部分を選択します。
更にその中には別々に条件が用意されています。
内の1つ目にある条件は、「$_fs3[=20];」です。3番目の項目が20と同じなら「真」となり「二十歳」という文字列が出力されます。「偽」の場合は「未成年」となります。この「偽」の場合ですが、その前(外)の条件で、20以下という条件が「真」であったため、その条件の中で更に20と同じでない場合ということですから、20歳未満は未成年となるのです。
このように入れ子構造を使うと複数の条件を満たす場合や1つ目の条件は満たしても2つ目の条件を満たさない場合と言った、複雑な条件を用意することができるのです。このサンプルでは3つの条件に応じて4つの選択肢を与えています。
リピート出力を行う場合、全レコードの中に出力するデータがなかったとき、データがないことを知らせる記述を差し込むことが可能です。
記述: | $_repeat;(A)$_rnext;(B)$_nodata;(C)$_rend;($_rnext;はなくてもかまいません。) |
実例: | $_repeat;<TR COLOR=#FFAAAA><TD>$_5;</TD></TR> $_nodata;<TR COLOR=#AAAAFF><TD>データがありません</TD></TR> $_rend; ($_nodata;が新しい専用コードです。) |
【解説】
上記の例では赤背景が通常の出力で使われ、出力するレコードがなかった場合に青背景の1行が出力されます。
$_repeat;~$_nodata;の間は通常通りリピート範囲として利用し、$_nodata;~$rend;の間(以下、代替表示部)をデータなし時に差し込みます。
代替表示部を使用する場合(出力データがない場合)、ヘッダー部も出力されませんので、形式的にヘッダーが必要な場合は代替表示部にヘッダーの記述を含めてください。
また、通常はレコードのないデータを処理することはできません。条件によって処理を飛ばした結果、出力されるレコードがなくなる場合があります。そのときに、代替表示部を使ってデータがなかったことを表示することができるのです。
自動実行モードの場合に限っては、レコードのないデータを読み込んで処理できるようにしました。当然、代替表示部を利用することになりますが、代替表示部を設定し忘れた場合、なにも表示されません。
使用ファイル: | address.csv, repeat_test.temp |
出力ファイル: | address.html |
フィールド設定: | Header: 4 Search: 8 = 2(わざと検索条件に合わないようにしてみます) |