【質問箱 No.37 回答】 ⇒⇒⇒⇒ 質問箱 No.37 (96年10月号)の趣旨 質問者:入川 精二 カレンダーを作りたい 回答者:入川 精二 <プログラム> 【 Ver.01 Rev.06 961012 】 /* 指定した年の1年分のカレンダーを作る */ $年: ACCEPT "何年のカレンダー? (西暦:YYYY)",X1; IF ERR(0)=55 THEN STOP;LET V1=NUM$(X1); IF LEN(V1)<>4 THEN GOTO $年; /* 4桁必要 */ IF NAME(3,"カレンダー"+V1)=0 THEN GOTO $年表; BIND;D;カレンダー%V1;Y; /* 同じ名前のバインダーは削除しておく */ $年表: SET/N/C;M;M;3; ;4;1;;Y;S;M;1;36;;Y;ESC; /* 日付区切記号ナシ・36桁 */ O;カレンダー%V1;8/3;DATE;曜;;ESC; IR;S;4;365; /* 365日分のデータ行確保 */ ATR;N;D;@DATE; /* DATE の列に日付属性 */ LET V11=V1+"0101"; /* 指定年の1月1日 */ NUM;M;C;@DATE;H;%V11;1; /* 一気に日付を書き込む */ IF RIGHT$([T,@DATE ],5)="1231" THEN GOTO $曜日; MT;@N;ESC; /* 閏年は1行追加 */ $曜日: CAL;@DATE MOD7+1=C2; /* 日付÷7 の余り+1 */ FOR X2=H TO T; /* 曜日に書き換える */ LET [X2,@曜 ]=KMID$("日月火水木金土",IVAL([X2,@曜 ]),1); NEXT; NF;S;@DATE;4/2/2; /* DATE の列を分割 */ DC;1;Y; /* 年 の列は削除 */ W;2;;月;日;ESC; CF;@日;4; /* 日 の列を4桁にする*/ ATR;R;1,2; /* 日付属性を解除 */ CJ/C;N;N;A;@日;A;Z;A;@日;ESC; /* 余分な 0 を削除して全角にする */ P;カレンダー%V1; /* 保存 */ $月別表: GROUP;カレンダー%V1;K;@月;;月別カレンダー%V1/D; /* 月別の頁に */ ARP/C; /* タイトルを変更 */ FOR X30=1 TO 12; LET V2=FORM$(V1,5)+"年"+FORM$(NUM$(X30),5)+"月"; ;N;%X30;%V2; NEXT;ESC; INFO/P;月別カレンダー%V1;月別カレンダー%V1;S;180;Y; /* 180桁に */ CA;月別カレンダー%V1;;2/3;;月別カレンダー%V1; /* 月 の列を削除 */ SET/N;S;M;1;80;;Y; /* 設定を元に戻しておく */ STOP;