《Jminの使い方》

 jmin.exeの外部変形での使用法について書いておこう。

ここでも、実際に使える(かもしれない)外部変形を製作するので、

できれば、実際に入力して、作業の内容を把握しながら進んでほしい。

 今回の御題は・・今日の日付付文字書き込み・・

とでもしようか・・・「*/* 訂正」とか「*/* 打ち合わせ済み」とか

 とりあえず・・バッチを・・

@rem 日付入文字
@echo off
rem #jww
rem #h0
rem #0 書き込み位置指定
rem #e
mawk32 -f todayst.awk jwc_temp.txt > temp.txt
del jwc_temp.txt
ren temp.txt jwc_temp.txt
exit

 とでも、しときましょう。

意味は・・・わかるよね。

で、todayst.awk のほうは・・とりあえず・・

BEGIN{
"jmin.exe c:\\jww\\jmmdata\\today.dat 日付文字"|getline
printf("ch 0 0 1 0 \"%s\n",$0)
}

 まあ、Jminの動作の確認の意味も含めて・・・こんなもので・・

ここから初めて、課題を少しづつ解決するという事で進めましょう。

AWK中、\\や\"とあるのは・・・例えば、"はAWKにとって、

文字列の始まりや終わりをあらわす・・意味のあるものです。

ですが、ここでは、単純に文字として"を出力したいわけです。

そう言う文字としての"を\"と\マークを付けて書くことになっています。

\自身は\\で表記します。\nはEnterと、思っておけばいいでしょう。

 今の段階ではjwc_temp.txt から読み込む必要がないのですが、

文字の浮きを調整したり、後々データーが必要になりそうなので、

バッチもmawk32 -f todayst.awk jwc_temp.txt > temp.txt

のままにしておきます。現時点では

mawk32 -f todayst.awk > temp.txt

としておいたほうが素直なのですが・・・

 ジャバはjwwディレクトリの下にjmmdataと言うディレクトリを作って、

jminやjmwで使うデータをまとめているのですが・・・

どこにおいてもよいので、today.datを作りましょう。

(jmmdata以外の場所におくときは、AWKの記述をそれにあわせておいてね。)

today.datはとりあえず・・・

m/d_訂正
m/d_決定
m/d_施主確認

とでも、しときましょう。

mは月にdは日に_はスペースに変換しようと、考えています。

 早速実行してみましょう。

訂正のところを選べば・・0 m/d_訂正 と、

決定のところを選べば・・1 m/d_決定 と文字列入力されたと思います。

このようにjminは選択肢の番号(最初は0)と選択された文字列を単純に

返してくれます。

 次のステップに進む前に・・・メニューの選択のしやすさを考慮して・・

today.datを・・

訂正: m/d_訂正
決定: m/d_決定
施主確認: m/d_施主確認
現場確認: 現場にてm/dに確認。

 とでも、直しておきましょう。jminは単純に1行を1項目として表示するので、

:の後に半角(全角はだめよ)スペースを適当な数入れておいて、

表示を調整しておきましょう。

 次のステップとして、日付の変換ですが・・

そのために、日付を得る必要がありますね。

そこで、関数を作っておきましょう。

function nowis(){
wdaymoto="日 月 火 水 木 金 土"
split(wdaymoto,wday);
now=systime();
year=strftime("%y",now)
yearh="H."12+year
manth=strftime("%m",now)
manthb=strftime("%b",now)
day=strftime("%d",now)
week=wday[1+strftime("%w",now)]
weekb=strftime("%a",now)
time=strftime("%p%I",now)
time24=strftime("%H",now)
minut=strftime("%M",now)
}

 なにやら長ったらしいですが・・・

やってる事は、systime()と言う組み込み関数でnowに 1970/1/1 0:0からの

(だったと思うが、違ったらごめん、でも意識する必要は無いよ)

秒数をいれて・・書式付の時間表示関数strtime()を使って・・

変数にいろいろとしまっておいて、後でデーター中の変換文字と

入れ替えよう・・って作戦なのですが・・・

 逆に、データーの方に書式文字を埋めておいて・・

strtime(str,now) とかで一発でやる手もありだと思います。

 で、AWKのほうは・・・あっしは・・・

BEGIN{
nowis()
}
END{
"jmin.exe c:\\jww\\jmmdat\\today.dat 日付文字"|getline
str=$3;
sub("y",yearh,str)
sub("m",manth,str)
sub("d",day,str)
sub("t",time24":"minut,str)
sub("_"," ",str)
printf("ch 0 0 1 0 \"%s\n", str)
}

function nowis(){
wdaymoto="日 月 火 水 木 金 土"
split(wdaymoto,wday);
now=systime();
year=strftime("%y",now)
yearh="H."12+year
manth=strftime("%m",now)
manthb=strftime("%b",now)
day=strftime("%d",now)
week=wday[1+strftime("%w",now)]
weekb=strftime("%a",now)
time=strftime("%p%I",now)
time24=strftime("%H",now)
minut=strftime("%M",now)
}

 ってな感じにしています。

文字浮きとかもあっしはあまり気にしない・・・

ので、そのまま使ってますが・・

BEGIN 節とEND節の間で、文字浮きの計算などの処理を入れれば・・

・・後は、置き換え文字の設定とデータの作り方だね。

ttとしとけば・・12/31(土)PM12 みたいに書き出すとか・・

 半角>全角の関数をはさんでもいいし・・・

遊んでみてくださいね。

ばっち スクリプト

 改造する上での注意として・・・例えば・・weekbとかを使うと・・

曜日を、sun mon ・・・とするので・・その後、mを月に変更とかすると、

おかしなことになりそうなので・・・そんな場合は m/d とかを使わずに

・・・$m/$d にして・・・AWKのほうもそれなりに直すとか・・・

工夫して使ってくださいね。


next:《JMWの使い方》