Tukubaiオンラインコマンドマニュアル - mojihame(1)

mojihame(1)

【名前】

mojihame : テンプレートに文字をはめ込み

【書式】

Usage   : mojihame <template> <data>                    (通常)
        : mojihame -l <label> <template> <data>         (行単位)
        : mojihame -h <label> <template> <data>         (階層データ)
Version : Tue Oct 20 15:17:47 JST 2020
Edition : 1

【説明】

引数に指定するtemplateファイルに、dataあるいは環境変数からデータを読んで値をはめ込む。次の3つの使い方がある。

  1. dataのすべてのフィールドを順番にはめ込む(通常)
  2. dataの行単位のフィールドをtemplateの指定ラベル間繰り返しはめ込む(行単位)
  3. dataが階層データの場合、templateの指定ラベル間、階層的にはめ込む(階層データ)

【例1】通常

templateの中にある%1 %2 %3 ...の部分に、dataのフィールド(左上から右下に順番に%1%2 %3 ...に対応)を読んで置換する。

$ cat data
a b
c d
$
$ cat template
1st=%1
2nd=%2
3rd=%3 4th=%4
$
$ mojihame template data
1st=a
2nd=b
3rd=c 4th=d
$

【例2】通常その2

デフォルトでは@というデータはヌル文字列として置換される。このデフォルトを変更するには-dオプションを使用する。-dオプションを単独で使用した場合には、ヌル文字列に置換する機能は無効になる。

$ cat data
a @
@ d
$
$ cat template
1st=%1
2nd=%2
3rd=%3 4th=%4
$
$ mojihame template data
1st=a
2nd=
3rd= 4th=d
$
$ mojihame -da template data
1st=
2nd=@
3rd=@ 4th=d
$

【例3】行単位

dataは1行単位に読み込まれ、行の各フィールドが%1 %2 ...に対応する。次の行が読み込まれるときは再びtemplateが使用され、データがはめ込まれ出力される。この使い方は旧mojihame-rと互換性がある。mojihame -rは将来廃止される。

$ cat data
a b c d
w x y z
$
$ cat template
1st=%1 2nd=%2
3rd=%3 4th=%4
$
$ mojihame -l template data
1st=a 2nd=b
3rd=c 4th=d
1st=w 2nd=x
3rd=y 4th=z
$
$ mojihame -r template data
1st=a 2nd=b
3rd=c 4th=d
1st=w 2nd=x
3rd=y 4th=z
$

【例4】行単位その2

-lオプションで引数(ラベル)を指定した場合、templateのラベルで囲まれた行のみにデータが繰り返しはめ込まれる。このときラベルを含む行は出力されない。また、ラベルにはさまれていない前後の部分は何も変換されず、そのまま出力される。ラベルはtemplate内部に2回だけ記述可能で、それぞれはめ込み対象の開始行と終了行とみなされる。指定ラベルは部分一致でラベル行と判断するので注意が必要。

$ cat data
a b
y z
$
$ cat template
header %1
LABEL
1st=%1 2nd=%2
LABEL
footer %2
$
$ mojihame -lLABEL template data
header %1
1st=a 2nd=b
1st=y 2nd=z
footer %2
$

【例5】行単位その3

-lオプションを繰り返し使用することにより、プルダウンなどのHTMLを簡易に生成することができる。指定ラベルはtemplateに1組しか認められていないので、次の例のように内側のラベルから順番に値をはめていくという手順でコマンドを実行する。

$ cat member
佐藤
鈴木
$
$ cat kbn1
東京
大阪
横浜
$
$ cat kbn2
男
女
$
$ cat template
MEMBER
氏名=%1
K1
地名=%1
K1
K2
性別=%1
K2
MEMBER
$
$ mojihame -lK1 template kbn1 |   mojihame -lK2 - kbn2 | mojihame -lMEMBER - member
氏名=佐藤
地名=東京
地名=大阪
地名=横浜
性別=男
性別=女
氏名=鈴木
地名=東京
地名=大阪
地名=横浜
性別=男
性別=女
$

【例6】行単位その4

デフォルトでは@というデータはヌル文字列として置換される。このデフォルトを変更するには-dオプションを使用する。-dオプションは-lオプションの後に指定する必要がある。

$ mojihame -lLABEL -dx template data

【例7】階層データ

-hオプションは階層的にデータのはめ込みを実施する。templateにおいて階層的ラベルに囲まれた部分に現れる%数字がdataの階層的キーフィールドに対応する。

$ cat data
山田 東京 10:00
山田 大阪 20:00
山田 横浜 09:30
鈴木 東京 16:45
鈴木 神戸 15:30
$

次のtemplateの場合、LABEL-1に囲まれているのは%1、LABEL-1に囲まれている部分にさらにLABEL-2があり、LABEL-2で囲まれている部分に%2と%3がある。このとき、第1フィールドが変化する回数だけ、LABEL-1で囲まれている部分が繰り返し値がはめられ、LABEL-2で囲まれている部分は、同じ第1フィールドの値を持つ第2、第3フィールドの行の数だけ繰り返し値がはめられる。

$ mojihame -hLABEL template dat
表題 %1
氏名=山田
地名=東京 時刻=10:00
地名=大阪 時刻=20:00
地名=横浜 時刻=09:30
氏名=鈴木
地名=東京 時刻=16:45
地名=神戸 時刻=15:30
$
$ cat template
表題 %1
LABEL-1
氏名=%1
LABEL-2
地名=%2 時刻=%3
LABEL-2
LABEL-1
$

階層の深さに制約はない。ラベルは部分一致でラベル行と判定される。コマンドライン上は-hLABELとし、templateでは階層にあわせてLABEL-1、LABEL-2とするのが有効。このような階層ラベルはtemplateの中でそれぞれ1組ずつのみ認められている。

【注意1】

デフォルトでは@はヌル文字列として置換される。文字を変更するには-dオプションを使う。-dオプションは-h-lオプションの後に指定しなくてはならない。

$ mojihame -dx template data
$ mojihame -lLABEL -dx template data
$ mojihame -hLABEL -dx template data

【注意2】アンダースコアデータの扱い

データの中の\_mojihame実行後には_に置換される。エスケープのない_は半角スペースに置換される。

$ cat template
<input type="text" value="%1" />
<input type="text" value="%2" />
<input type="text" value="%3" />
$
$ cat data
usp_lab
usp\_lab
______\_\_
$
$ mojihame template data
<input type="text" value="usp lab" />
<input type="text" value="usp_lab" />
<input type="text" value="      __" />
$

【備考】

  1. ファイル名に-を指定したときは標準入力からのデータを期待する。templateもdataのいずれかを指定できる。
  2. -dオプションは文字列を指定しない場合にはdataの値をそのまますべてtemplateにはめ込む。

【関連項目】

filehame(1)formhame(1)

Last modified: 2022-08-13 08:42:35