UWSC|現在のタイムスタンプ文字列を返す自作関数

ポク太郎です。

繰り返し処理を行う場合、ログファイルを残したい場合がよくあります。どのOSでもファイル名に重複があってはいけないので、その瞬間の時刻をファイル名として使ったり。

またデータを記録していくプログラムでは識別のためにタイムスタンプが便利。

以下の関数を使うとタイムスタンプが得られ、簡単にファイル名を生成することができます。


現在のタイムスタンプを文字列で返す関数

FUNCTION t_stamp(mode)
         GETTIME()
         date=G_TIME_YY4+G_TIME_MM2+G_TIME_DD2
         time=G_TIME_HH2+G_TIME_NN2+G_TIME_SS2
      SELECT mode
      CASE 0
         RESULT=date
      CASE 1
         RESULT=time
      CASE 2
         RESULT=date+"_"+time
      DEFAULT
         RESULT="ポクエラー(time_stamp関数):定義されていないmodeが指定されました。"
      SELEND
FEND
プログラム説明(○⇒:成り立つ場合、×⇒:成り立たない場合)
1,15行目 1
15
FUNCTION t_stamp(mode)
FEND
t_stamp(mode)関数宣言
2016年5月4日20時36分44秒に呼び出された場合、
mode=0: 日付”20160504″を返す
mode=1: 時刻”203644″を返す
mode=2: 日付+時刻”20160504_203644″を返す
mode=other: エラーを返す
2行目 2          GETTIME()
GETTIME()
UWSC標準関数。正式には、
戻値=GETTIME([±n日, 基準日])
この関数を呼び出すと、以下の特殊変数に値が入る。
G_TIME_YY …年、G_TIME_MM …月、
G_TIME_DD …日、G_TIME_HH …時、
G_TIME_NN …分、G_TIME_SS …秒、
G_TIME_ZZ …ミリ秒、
G_TIME_WW …曜日(0:日、~、6:土)、
G_TIME_YY2 …年をxxの文字型、
G_TIME_MM2 …月をxxの文字型、
G_TIME_DD2 …日をxxの文字型、
G_TIME_HH2 …時をxxの文字型、
G_TIME_NN2 …分をxxの文字型、
G_TIME_SS2 …秒をxxの文字型、
G_TIME_ZZ2 …ミリ秒をxxxの文字型、
G_TIME_YY4 …年(西暦)をxxxxの文字型
3,4行目 3
4
         date=G_TIME_YY4+G_TIME_MM2+G_TIME_DD2
         time=G_TIME_HH2+G_TIME_NN2+G_TIME_SS2
変数dateに、現在の 年(4桁)+月(2桁)+日(2桁) を代入。
変数timeに、現在の 時(2桁)+分(2桁)+秒(2桁) を代入。
5,14行目 5
14
      SELECT mode
      SELEND
モードによる分岐命令。
6,7行目 6
7
      CASE 0
         RESULT=date
mode=0を指定された場合
戻り値として、変数dateを返す。
8,9行目 8
9
      CASE 1
         RESULT=time
mode=1を指定された場合
戻り値として、変数timeを返す。
10,11行目 10
11
      CASE 2
         RESULT=date+_+time
mode=2を指定された場合
戻り値として、変数dateと変数timeを“_”(アンダーバー)でつなげたものを返す。
12,13行目 12
13
      DEFAULT
         RESULT=ポクエラー(time_stamp関数):定義されていないmodeが指定されました。
mode=それ以外を指定された場合
戻り値としてエラーを返す。


呼び出し側は、

//2017年2月20日の18時15分22秒に呼び出した場合、
R=t_stamp(0)//Rには"20170220"が代入される。
R=t_stamp(1)//Rには"181522"が代入される。
R=t_stamp(2)//Rには"20170220_181522"が代入される。
R=t_stamp(3)//Rにはエラーメッセージが代入される

文字列タイムスタンプ関数の動作確認

動作確認プログラムがこちら。

FOR i=0 TO 3
   PRINT i+" "+t_stamp(i)
NEXT
プログラム説明(○⇒:成り立つ場合、×⇒:成り立たない場合)
1,3行目 1
3
FOR i=0 TO 3
NEXT
変数iを0~3までループ。
2行目 2    PRINT i+ +t_stamp(i)
変数it_stamp()関数の引数として渡し、変数iと関数の戻り値を並べて表示する。


確認結果は、

//結果(2017年5月26日23時17分50秒に実行)
0 20170526
1 231750
2 20170526_231750
3 ポクエラー(time_stamp関数):定義されていないmodeが指定されました。

文字列関連の話題
文字列操作あれこれMID、LEFT、RIGHT、LEN 文字列中に指定ワードあるなし判定関数 現在のタイムスタンプ文字列を返す関数 カンマ等で区切られたフィールドデータを扱う関数
本記事の内容は以下でした。
○日付時刻を文字列で返す関数

戻値(str)=t_stamp(mode)

コメント

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