BASICで質問

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
仕事の関係でBASICを扱うのですが
入力されたYYYYMMDDのの8バイトを日付として適性かどうか
見る方法ってなんかありますか
2 :01/11/03 23:39
表示して人力で判断する。
3デフォルトの名無しさん:01/11/03 23:42
やっぱそれしかないんですか・・・
4デフォルトの名無しさん:01/11/03 23:43
西暦エミュレートするってのはどお?
5デフォルトの名無しさん:01/11/03 23:47
自分で判定プログラムしてもたいしたことないんじゃない?
4,6,9,11月なら31日は不正。
2月は31,30が不正で、29日は閏年判定。
6 :01/11/03 23:48
>>3
当たり前だ。
古代バビロニアで生まれた60進法とキリストの生誕を起源とする西暦が
どうして発明されて高々50年のコンピュータに理解できるというのだ。
つまらん質問はよせ。
>6

いや、プログラムで正規表現かどうかの計算はできるって(;´∀`)
今作ってるけど、期待しないでマテ>1
8デフォルトの名無しさん:01/11/03 23:53
>7
感謝!
isdateとかそーいう関数が当たり前だと思ってきたんで
苦労してます。
>>6
今使ってる暦は16世紀にローマ法王が決めたもんだけどな。
107:01/11/04 00:46
REM-------------とりあえず適当に・・・2000年12月31日って事で(藁
REM-------------Y(年),M(月),D(日)は適当に替えてください
REM-------------年数のチェックはとりあえずしません。
10 Y=2000
20 M=12
30 D=31

REM-------------月の正誤チェック
40 IF(M<1) OR (M>12) GOTO 900

REM-------------うるう年を計算する場所はここ
50 U=0
60 IF ((INT(Y/4)=Y/4) AND (INT(Y/100)<>Y/100)) OR (INT(Y/400)=Y/400) THEN U=1

REM-------------月から日のリミッタを検索(上から1月〜12月)
70 IF M=1 LD=31
80 IF M=2 LD=28+U
90 IF M=3 LD=31
100 IF M=4 LD=30
110 IF M=5 LD=31
120 IF M=6 LD=30
130 IF M=7 LD=31
140 IF M=8 LD=31
150 IF M=9 LD=30
160 IF M=10 LD=31
170 IF M=11 LD=30
180 IF M=12 LD=31

REM-------------日の正誤チェック
190 IF(D<1) OR (D>LD) GOTO 920

REM-------------表現が正しい場合はここに来る
200 GOTO 940

REM-------------エラー文字列
900 PRINT '月のエラー'
910 GOTO 1000
920 PRINT '日のエラー'
930 GOTO 1000
940 PRINT '正常'
1000 END

テストしてないけど、とりあえずうPしとく。
11デフォルトの名無しさん:01/11/04 02:11
感謝。
さっそく組み込んでみます。
行番号付きな古いBASICの場合
うるう年判定は>>10のを流用して、チェックしてないです(手抜き)

10 D$= "YYYYMMDD":' ←適当な値を入れる
20 GOSUB 100
30 IF RE= 1 THEN PRINT "OKです" ELSE PRINT "ダメです"
40 END
100 REM D$が正しい日付かどうかチェックする
110 REM OKならRE=1,ダメならRE=0にする。
120 RE= 0
130 IF LEN(D$)<> 8 THEN RETURN
140 TY= INT(LEFT$(D$, 4)
150 TM= INT(MID$(D$, 5,2))
160 IF TM< 1 OR 12< TM THEN RETURN
170 TD= INT(RIGHT$(D$,2))
180 IF TD< 1 OR 31< TD THEN RETURN
190 TN= 31
200 IF TN= 2 AND (((TY MOD 4= 0) AND (TY MOD 100= 0)) OR (TY MOD 400= 0)) THEN TN= 29 ELSE TN= 28
210 IF TD= 4 OR TD= 6 OR TD= 9 OR TD= 11 THEN TN= 30
220 IF TN< TD THEN RETURN
230 RE= 1: RETURN
>>11
10、12じゃないけど組み込む前に
そのまま実行してテストしようとはおもわんの?
14デフォルトの名無しさん:01/11/04 03:03
>>13
業務用ハンディターミナル用ベーシックなので
すぐに実行できないの。
いまはただエディタでかいてるだけ。
書いてるって、コピペじゃダメなの?
16デフォルトの名無しさん:01/11/04 03:13
ちょっと独自のベーシックらしいので
ある程度直して移植しないとだめみたい。
177:01/11/04 03:39
うるう年さえ計算できればなんとかなるYO!
ガンバ
ベクタでActive Basicっての落として>>10をやってみた
http://www.vector.co.jp/vpack/filearea/win/prog/basic/index.html

IF文にTHENを補って、PRINTの出力文をダブルクォートにしたら動いた。
2000/2/29 は正常で、2001/2/29はエラーたっだからとりあえずいけそうだね。

>>1 も、使えそうなエミュレータ探してみたほうがいいと思うよ。
気になったんだけど
N88BASICのコードのコンパイラって無いんかいな?
今までそんなこと気にしたこと無かった…
だってもう使わないと思ってたし(笑
>>18 のActiveBasicは? N88互換でExeも作れるみたいだよ。
2118:01/11/04 05:37
>>20
サンクス
ちょっと落として遊んでみた。
おもしろかったYO!懐かしいし。
2221=19:01/11/04 05:37
>>20
間違い
cで書けやゴルァ