Tukubaiオンラインコマンドマニュアル

mojihame(USP Lab(1))

【名前】

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

【書式】

Usage   : mojihame <template> <data>                            (通常)
        : mojihame -l <label> <template> <data>         (行単位)
        : mojihame -h <label> <template> <data>         (階層データ)
Version : Sat Jan 24 11:09:49 JST 2009

Usage   : mojihame-l [-l<label>][-dlt;c>] <template> <data>
Version : Sat Jan 24 13:31:13 JST 2009

Usage   : mojihame-h -h<label> [-dlt;c>] <template> <data>
Version : Sat Jan 24 13:59:43 JST 2009

Usage   : mojihame-p [-d<c>] <template> <data>
Version : Sat Jan 24 13:30:10 JST 2009

【説明】

引数に指定する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="      __" />
$

【注意3】

ファイル名に-を指定したときは標準入力からのデータを期待する。templateもdataのい
ずれかを指定できる。

【注意4】

mojihameはシェルスクリプトである。オプションの指定によりmojihame-p(通常)、
mojihame-l(行単位) 、mojihame-h(階層データ)を起動している。

【注意5】

-dオプションは文字列を指定しない場合にはdataの値をそのまますべてtemplateにはめ
込む。

【注意6】

変数の受け渡しがファイルにならず明示的になりにくいため、mojihame-eは廃止された
。

last modified: 2012-04-11 13:21:05
Contact us: uecinfo@usp-lab.com
Copyright (c) 2012 Universal Shell Programming Laboratory All Rights Reserved.
