スポンサーリンク

時間を計算するTeraTermマクロ

プログラミング

時間を計算するテラタームマクロを作成しました。

HH:MM:SS形式で表される時間の足し算と引き算を行います。
gettimeマクロを用いることでn時間経過したら終了するマクロなどに役立つかと思います。
自分のマクロファイルの最下にコピペしてご使用ください。

end
;■□■□■□ TIME CALCULATOR ■□■□■□

;[HH:MM:SS]形式文字列の計算を行うサブブロセス
;直接マクロにコピーして使用する
;計算対象の使用変数に格納してcall命令で呼出す
;★サブルーチン名
;  ○24時間計算 結果:0:00:00~23:59:59
;  ・TIME_CALC_24H_ADD :24時間 足し真 (TIME_CALC_A + TIME_CALC_B)
;  ・TINE_CALC_24H_SUB :24時間 引き算 (TIME_CALC_A - TIME_CALC_B)
;  〇時間計算 結果はhour部分のみ整数値
;  ・TIME_CALC_ADD : 足し真 (TIME_CALC_A + TIME_CALC_B)
;  ・TINE_CALC_SUB : 引き算 (TIME_CALC_A - TIME_CALC_B)
;★使用変数
;  ・(文字列型) TIME_CALC_A : 第一引数([HH:MM:SS]形式)
;  ・(文字列型) TIME_CALC_B : 第二引数([HH:MM:SS]形式)
;★演算結果
;  ・(文字列型) TIME_CALC_RESULT : 計算結果([HH:MM:SS]形式)
;  ・(整数型) TIME_CALC_R_INT_DD : 計算結果:日 (引き算の場合)結果が負になった場合に1を格納する。
;  ・(整数型) TIME_CALC_R_INT_HH : 計算結果:時間
;  ・(整数型) TIME_CALC_R_INT_MM : 計算結果:分
;  ・(整数型) TIME_CALC_R_INT_SS : 計算結果:秒

:TIME_CALC_24H_ADD
call TIME_CALC_SYSTEM_VAR_BACKUP

strsplit TIME_CALC_A ':' 3
str2int TIME_CALC_A_INT_HH groupmatchstr1
str2int TIME_CALC_A_INT_MM groupmatchstr2
str2int TIME_CALC_A_INT_SS groupmatchstr3

strsplit TIME_CALC_B ':' 3
str2int TIME_CALC_B_INT_HH groupmatchstr1
str2int TIME_CALC_B_INT_MM groupmatchstr2
str2int TIME_CALC_B_INT_SS groupmatchstr3

TIME_CALC_R_INT_SS = TIME_CALC_A_INT_SS + TIME_CALC_B_INT_SS
TIME_CALC_R_INT_MM = TIME_CALC_A_INT_MM + TIME_CALC_B_INT_MM
TIME_CALC_R_INT_HH = TIME_CALC_A_INT_HH + TIME_CALC_B_INT_HH


if TIME_CALC_R_INT_SS >= 60 then
 TIME_CALC_R_INT_SS = TIME_CALC_R_INT_SS - 60
 TIME_CALC_R_INT_MM = TIME_CALC_R_INT_MM + 1
endif

if TIME_CALC_R_INT_MM >= 60 then
 TIME_CALC_R_INT_MM = TIME_CALC_R_INT_MM - 60
 TIME_CALC_R_INT_HH = TIME_CALC_R_INT_HH + 1
endif

sprintf2 groupmatchstr1   '%d' TIME_CALC_R_INT_HH
sprintf2 groupmatchstr2 '%02d' TIME_CALC_R_INT_MM
sprintf2 groupmatchstr3 '%02d' TIME_CALC_R_INT_SS
strjoin TIME_CALC_RESULT ':' 3

call TIME_CALC_SYSTEM_VAR_RECALL
return

:TIME_CALC_24H_SUB
call TIME_CALC_SYSTEM_VAR_BACKUP
TIME_CALC_R_INT_DD = 0

strsplit TIME_CALC_A ':' 3
str2int TIME_CALC_A_INT_HH groupmatchstr1
str2int TIME_CALC_A_INT_MM groupmatchstr2
str2int TIME_CALC_A_INT_SS groupmatchstr3

strsplit TIME_CALC_B ':' 3
str2int TIME_CALC_B_INT_HH groupmatchstr1
str2int TIME_CALC_B_INT_MM groupmatchstr2
str2int TIME_CALC_B_INT_SS groupmatchstr3

TIME_CALC_R_INT_SS = TIME_CALC_A_INT_SS - TIME_CALC_B_INT_SS
TIME_CALC_R_INT_MM = TIME_CALC_A_INT_MM - TIME_CALC_B_INT_MM
TIME_CALC_R_INT_HH = TIME_CALC_A_INT_HH - TIME_CALC_B_INT_HH

if TIME_CALC_R_INT_SS < 0 then
 TIME_CALC_R_INT_SS = TIME_CALC_R_INT_SS + 60
 TIME_CALC_R_INT_MM = TIME_CALC_R_INT_MM - 1
endif

if TIME_CALC_R_INT_MM < 0 then
 TIME_CALC_R_INT_MM = TIME_CALC_R_INT_MM + 60
 TIME_CALC_R_INT_HH = TIME_CALC_R_INT_HH - 1
endif

if TIME_CALC_R_INT_HH < 0 then
 TIME_CALC_R_LINT_HH = TIME_CALC_R_INT_HH + 24
 TIME_CALC_R_INT_DD = 1
endif


sprintf2 groupmatchstr1   '%d' TIME_CALC_R_INT_HH
sprintf2 groupmatchstr2 '%02d' TIME_CALC_R_INT_MM
sprintf2 groupmatchstr3 '%02d' TIME_CALC_R_INT_SS
strjoin TIME_CALC_RESULT ':' 3

call TIME_CALC_SYSTEM_VAR_RECALL

return

:TIME_CALC_SYSTEM_VAR_BACKUP
result_b = result
groupmatchstr1_b = groupmatchstr1
groupmatchstr2_b = groupmatchstr2
groupmatchstr3_b = groupmatchstr3
groupmatchstr4_b = groupmatchstr4
groupmatchstr5_b = groupmatchstr5
groupmatchstr6_b = groupmatchstr6
groupmatchstr7_b = groupmatchstr7
groupmatchstr8_b = groupmatchstr8
groupmatchstr9_b = groupmatchstr9
return

:TIME_CALC_SYSTEM_VAR_RECALL
result = result_b
groupmatchstr1 = groupmatchstr1_b
groupmatchstr2 = groupmatchstr2_b
groupmatchstr3 = groupmatchstr3_b
groupmatchstr4 = groupmatchstr4_b
groupmatchstr5 = groupmatchstr5_b
groupmatchstr6 = groupmatchstr6_b
groupmatchstr7 = groupmatchstr7_b
groupmatchstr8 = groupmatchstr8_b
groupmatchstr9 = groupmatchstr9_b
return

使用方法はコメントアウトの通り、

指定変数「TIME_CALC_A」と「TIME_CALC_B」に時間を格納して

足し算は「TIME_CALC_24H_ADD」、引き算は「TIME_CALC_24H_ADD 」を呼び出します

そうすると

「TIME_CALC_RESULT」「TIME_CALC_R_INT_DD」「TIME_CALC_R_INT_HH」「 TIME_CALC_R_INT_MM」「TIME_CALC_R_INT_SS」という変数に結果がそれぞれ格納されます。

例 12:30と現在時刻を足した時間を表示し、更に12:30からの経過時間を表示する。

gettime TIME_CALC_A
TIME_CALC_B = '12:30:00'
call TIME_CALC_24H_ADD

sprintf 'add result = %s' TIME_CALC_RESULT
messagebox TIME_CALC_RESULT 'ADD'

call TIME_CALC_24H_SUB
sprintf 'sub result = %s' TIME_CALC_RESULT
messagebox TIME_CALC_RESULT 'SUB'

;この下にTIME CALCULATORマクロをコピペ

誰かのお役に立てますと幸いです。

コメント

タイトルとURLをコピーしました