BASIC(DATE$/TIME$/VAL/STR$)


アニメ『サムライフラメンコ』(2013)

何これ、面白い。ヒーローに憧れる青年が夜な夜な変な恰好で不良市民に注意するも返り討ちに遭います。変な恰好のヒーローの名前は、サムライフラメンコ。偽サムライフラメンコも出てきたりして、やたら面白いです。エンディング曲は、戸松遥、M・A・O、山崎エリイが歌う「デートTIME」です。

そろそろBASICも思い出してきたので、いろいろ作れそうな気もしますが、もう少しだけ一つずつ勉強していきます。

今回はBASICの時間計算です。 DATEとTIMEを使ってみましょう。

takk@deb9:~/tmp$ cat date.bas | nl -ba -i10 -v10
    10  '$lang: "qb"
    20
    30  print date$
    40  print time$
takk@deb9:~/tmp$

実行結果はこうです。

takk@deb9:~/tmp$ ./date
09-05-2017
23:15:39
takk@deb9:~/tmp$

時分秒を個別で取得したい場合は、TIMEで返る文字列の一部をMID$を使って抽出します。

takk@deb9:~/tmp$ cat time.bas | nl -ba -i10 -v10
    10  '$lang: "qb"
    20
    30  time_str$ = time$
    40
    50  print time_str$
    60
    70  hour$ = mid$(time_str$,1,2)
    80  min$ = mid$(time_str$,4,2)
    90  sec$ = mid$(time_str$,7,2)
   100
   110  print hour$
   120  print min$
   130  print sec$
   140
takk@deb9:~/tmp$

実行結果です。

takk@deb9:~/tmp$ ./time
23:32:39
23
32
39
takk@deb9:~/tmp$

ただこれでは文字列を取得してるだけですので計算ができません。
文字列を数字にするには、VAL()を使います。数字を文字列に戻すには、STR$()を使います。

takk@deb9:~/tmp$ cat val.bas | nl -ba -i10 -v10
    10  '$lang: "qb"
    20
    30  sec$ = mid$(time$,7,2)
    40
    50  print sec$
    60
    70  sec_val = val(sec$)
    80
    90  sec_val = sec_val + 100
   100
   110  sec$ = str$(sec_val)
   120
   130  print sec$

実行結果です。

takk@deb9:~/tmp$ fbc val.bas
takk@deb9:~/tmp$ ./val
29
 129
takk@deb9:~/tmp$

29に100が加算されて129が表示されました。
129の前にスペースがありますが、負の数の時、-が入ります。

takk@deb9:~/tmp$ cat minus.bas | nl -ba -i10 -v10
    10  '$lang: "qb"
    20
    30  print str$(-200)
    40  print str$(200)
takk@deb9:~/tmp$ fbc minus.bas
takk@deb9:~/tmp$ ./minus
-200
 200
takk@deb9:~/tmp$

では、時間を数値に直して、計算してみます。
こんなプログラムになりました。

takk@deb9:~/tmp$ cat time-calc.bas | nl -ba -i10 -v10
    10  '$lang: "qb"
    20
    30  time_str$ = time$
    40
    50  print time_str$
    60
    70  hour$ = mid$(time_str$,1,2)
    80  min$ = mid$(time_str$,4,2)
    90  sec$ = mid$(time_str$,7,2)
   100
   110  timeval = val(hour$)*3600 + val(min$)*60 + val(sec$)
   120
   130  timeval = timeval + 60*5
   140
   150  hour$ = str$(int(timeval / 3600))
   160  min$ = str$(int((timeval mod 3600) / 60))
   170  sec$ = str$(timeval mod 3600 mod 60)
   180
   190  print hour$;":";min$;":";sec$
takk@deb9:~/tmp$

結果です。

takk@deb9:~/tmp$ ./time-calc
19:12:17
 19: 17: 17
takk@deb9:~/tmp$

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA