一括表示

− 野ざらし言 −

[4566] 選択曜日の指定範囲の日付を出力

めざら 2019/11/13(Wed) 21:39
http://mezala.la.coocan.jp/
仕事で予定表を作る都合で,一月分の日付リストを出力するマクロを作り,
その後,出力する曜日を選択できるメニューを装備させてみたものです.
今日,メニューの項目の値を全反転する機能を付加したので上げました.

= Datelstw.def v0.20 = by H_ear
#if 0
選択曜日の指定範囲の日付を出力
 ON/OFFメニューのテスト
#endif
* mad for vz!
1 ^\ "" ?.
        (mb || mr==$80)?{ &m("! View/Block mode") . }
        mi[-,
        JU[, JU=$7F+$80,                ;#DEF 初期設定可
                ; +1=日; +2=月; +4=火; +8=水; +16=木; +32=金; +64=土
                ;初期設定は全ビットON, 各ビットで制御可能
                ;; bit 0  1  2  3  4  5  6  7 
                ;;     fa fb fc fd fi fj fx fy
                ;;     日 月 火 水 木 金 土 1ヶ月限定出力フラグに使用
                ;;用途に合わせて on/off しておくことも可能
                ;;例えば,月水木土のみ出力なら JU=$5A+$80 など.
        ax=$2A00, &i($21)               ;当日取得
        ; ---- 年/月入力 ----
 :a     &g("年 [CR]:当年") y=r,         ;<y>年取得
        (r==-1 || r==0)?{ &m("") >z }   ;[ESC] or 数値でないなら終了
        (r==-2)?{ y=cx, }               ;[CR]:当年
 :b     &g("月 [CR]:1-12月") m=r,       ;<m>月取得
        (r==-1)?{ &m("") >z }           ;[ESC]なら終了
        (r==-2)?{ m=1, fy!, }           ;[CR]:1年分
 :c     (m<0 || m>12)?{ >b }            ;範囲外なら再入力を促す

        ;JUを使うことで以下の代入を省略できる
        ;fa=(o&1>0), fb=(o&2>0), fc=(o&4>0), fd=(o&8>0),
        ;fi=(o&16>0), fj=(o&32>0), fx=(o&64>0),
        ;o=fa+fb*2+fc*4+fd*8+fi*16+fj*32+fx*64,
        ; ---- menu ----
 :l     !01
        (r>7)?>R                        ;OKで抜ければrun
        (r>6)?{ JU^=$7F,  >l }          ;全反転
        (r+1)??{ &m("Cancel") >z }      ;r=-1 なら[ESC]
        >l

 :R     ; ---- run ----
        n=31, &00 (n>r.m)?n=r.m,        ;<n>月の日数確定

        ; ---- 朔日の曜日を確定 ----
        ; <-- y,m,d
        ; --> w
        d=1, &01                        ;<d>朔日を渡して<w>曜日を取得

        ; ---- 出力 ----
        #< (ct!=1)?#n                   ;空行出力(オートインデント対応)
 :n                                     ;(n){ ループ内に条件分岐は使えない
        &02                             ;wに応じたビットの値を評価させる
        ;fa==1, fb==2, fc==4, fd==8, fi==16, fj==32, fx==64,
        (r)?{
        &s      ;; ---- 書式カスタマイズ可能 ----
        ;       &?("%4d/%02d/%02d (%2s)",y,m,d,"日月火水木金土"+w*2) #m
        ;       &?("%4d-%02d-%02d (%2s)",y,m,d,"日月火水木金土"+w*2) #m
                &?("%4d%02d%02d (%2s)",y,m,d,"日月火水木金土"+w*2) #m
        }
        &d d++, w=(w+1)%7,
        (n--)?>n                                ;} 擬似ループの末尾

        ; ---- 連続処理 ----
        (fy)?{ &a("次の月を出力します") }?r+,
        (r>0)?{
                m++,
                (m>12)?{
                        (fy)??>q
                        m=1, y++,
                }
                >R
        }

 :q     ; ---- quit ----
        #g                      ;余分な改行を削除
 :z     ; ---- exit ----
        JU], mi],
        &d #] .

00:     ; ---- 日の整合性確認 ----      ;from calendar.def
        r=" $(1f,1c,1f,1e,1f,1e,1f,1f,1e,1f,1e,1f,)",   ;Yushi(__)
;       _______1__2__3__4__5__6__7__8__9__a__b__c       ;month
        (y%4==0 && (y%100!=0 || y%400==0))?r.2=29, ?r.2=28,     ;閏年
        (r)

01:     ; ---- 指定日の曜日を算出(ツェラーの式) ----
        ;1,2月を前年の13,14月として計算する
        ;グレゴリオ暦採用の1583年以降に対応する
        m[, y[,
        (m<3)?{ y--, m+=12, }   ;Zeller(__)
        w=((y+ y/4+ y/400+ (m*13+8)/5+ 1- y/100) +d -1) %7,
        y], m],

02:     ;wに応じたビットが立っているか評価した値を持って戻る
        (w)>?{ (JU&1) (JU&2) (JU&4) (JU&8) (JU&16) (JU&32) (JU&64) }

* popup menu
1 "曜日選択",12,9,4
        "N 日",fa
        "G 月",fb
        "K 火",fc
        "S 水",fd
        "M 木",fi
        "I 金",fj
        "D 土",fx
        "A 全反転"
        "OK"
*

[Variables]
        y,m,d,w 年月日曜
        n       カレント月の日数
        JU
         fa,fb,fc,fd,fi,fj,fx   曜日選択フラグ
         fy     1年分出力フラグ
[Buffers]
                
[History]
2018/03/04 0.10 初版
2019/11/13 0.20 メニューに全反転を追加
[Notes]
月水金なら EU&=1~ で偶数切捨てになるが使えるか?
on/offなら表示用文字列設定不要.「日$(9)off on」なんてする必要なかった.

[4567] Re: 選択曜日の指定範囲の日付を出力

konno 2019/11/20(Wed) 00:32
[4566]へのコメント
> 仕事で予定表を作る都合で,一月分の日付リストを出力するマクロを作り,
> その後,出力する曜日を選択できるメニューを装備させてみたものです.
> 今日,メニューの項目の値を全反転する機能を付加したので上げました.

これ、いいですね。
特定の日付が何曜日だったかとか、ピンポイントで指定できるのが良いです。
私はめざらさんの日付関連マクロは結構使わせてもらっています。
このルーチンを改造してみたいんですが、難しくて手が出ないです。(^^;
勉強させてもらいます。

[4569] Re^2: 選択曜日の指定範囲の日付を出力

めざら 2019/11/20(Wed) 20:40
[4567]へのコメント http://mezala.la.coocan.jp/
> このルーチンを改造してみたいんですが、

そのような需要があるのであれば,参考までに伺いたいのですが……
具体的には,どこのルーチンなのでしょう。

やや説明不足のところは多々ありますが,それほど複雑なことはしてないですよ。

[4572] Re^3: 選択曜日の指定範囲の日付を出力

konno 2019/11/22(Fri) 00:06
[4569]へのコメント
> そのような需要があるのであれば,参考までに伺いたいのですが……
> 具体的には,どこのルーチンなのでしょう。

す、すみません、ルーチンというのは不適切でしたね。
改造ではなく、ルーチンを使わせてもらおうというつもりだったのです。

> やや説明不足のところは多々ありますが,それほど複雑なことはしてないですよ。

はい、ルーチンは丸ごと利用させてもらうつもりなので、それはいいのですが
問題は自分のマクロを作るスキルなんですね。(^^;
まだ具体的な形も仕様も決まっていないので、来年の課題ですね。

[4573] Re: 選択曜日の指定範囲の日付を出力

キャロル 2020/01/31(Fri) 15:20
[4566]へのコメント
> 仕事で予定表を作る都合で,一月分の日付リストを出力するマクロを作り,
> その後,出力する曜日を選択できるメニューを装備させてみたものです.
> 今日,メニューの項目の値を全反転する機能を付加したので上げました.

 めざらさん
 お久しぶりです。
 このマクロ、たいへんいいです。私はこれまで、syoさんの「窓の奈美」に実装されているカレンダーマクロで1年分のテキストをつくり、Vzで、予定管理表、ミニ日記、雑誌の月報原稿作成、に活用していました。これからは、Vzで直接、日付一覧を作成することができます。大いに活用します。ありがとうございました。

[4574] Re^2: 選択曜日の指定範囲の日付を出力

めざら 2020/02/12(Wed) 07:56
[4573]へのコメント http://mezala.la.coocan.jp/
お久しぶりです.
出力部分はいかようにもカスタマイズできますので,お好きなようにカスタマイズしてご利用くださいね.

自分の使い方としては,同一曜日の複数のアイテムを作るために,それぞれ出力してマージ,ソートするということをしています.もう少し便利にできないかと別の側面から考えてもいます.

なにかアイデアがあったら何でもください!

↑ このページの先頭