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のほうもそれなりに直すとか・・・
工夫して使ってくださいね。