【相談】本文の日付と曜日のチェックにつNo.02821
TATE2 さん 10/12/28 15:02
 
秀まるおさん

TATEです。

メール送信時に添付忘れをチェックするようなマクロ?があることは
知っているのですが、本文に記述されている日付と曜日をチェックす
るような、マクロ等があれば教えていただけないでしょうか。

例えば、1/11(月)と書いてあればエラーとしてみつけて欲しい
のです。
(なかなか難しいのでは思います)


気をつけてメールを作成すればよいのですが、希にポカミスをして
へこんでしまいます。
(曜日を書かない手もあるのですが)


以上、よろしくお願いします。

[ ]
RE:02821 【相談】本文の日付と曜日のチェNo.02822
秀まるお さん 10/12/28 16:33
 
 試しにマクロ作ってみました。全角文字で「1/11(火)」のように書いて
ある文字列にのみ反応するマクロになってます。


    #xStart = x; #yStart = y;
    #readonly = readonly;
    #browsemode = browsemode;
    if( #browsemode ) {
        browsemodeswitch;
    }
    gofiletop;
    searchdown2 "[0-9]+/[0-9]+([日月火水木金土])", regular;
    if( !result ) {
        if( #browsemode ) {
            browsemodeswitch;
        }
        moveto #xStart, #yStart;
        endmacro;
    }
    #x = x; #y = y;
    if( #readonly ) {
        readonlyswitch;
    }
    beginsel;
    golineend2;
    tohankaku;
    $text = gettext( #x, #y, x, y );
    undo;
    moveto #x, #y;
    if( #readonly ) {
        readonlyswitch;
    }
    if( #browsemode ) {
        browsemodeswitch;
    }
    loaddll "hmjre.dll";
    #n = dllfunc("FindRegular"
                , "([0-9]+)/([0-9]+)\\(([日月火水木金土])\\)"
                , $text, 0);
    if( #n != 0 ) {
        endmacro;
    }
    $month = leftstr($text, dllfunc("GetLastMatchTagLength",1));
    $day = midstr($text, dllfunc("GetLastMatchTagPosition",2)
                    , dllfunc("GetLastMatchTagLength",2));
    $week = midstr($text, dllfunc("GetLastMatchTagPosition",3)
                    , dllfunc("GetLastMatchTagLength",3));
    #month = val($month);
    #day = val($day);

    loaddll "tkinfo.dll";
    #yearNow = val( dllfuncstr("CurrentDate","YYYY" ) );
    #monthNow = val( dllfuncstr("CurrentDate","M" ) );
    if( #month < #monthNow ) {
        #yearNow = #yearNow + 1;
    }
    $week2 = dllfuncstr("FormatDate", str(#yearNow) + "/"
                + str(#month) + "/"+str(#day)
                , "W" );
    if( $week2 != $week ) {
        message "曜日が違います。正しい曜日 = " + str(#month) + "/" +
        str(#day)
                 + "(" + $week2 + ")";
        #n = dllfunc("SetCancel", 1);
    }
    endmacro;

[ ]
RE:02822 【相談】本文の日付と曜日のチェNo.02823
TATE2 さん 10/12/29 16:19
 
TATEです。

年末慌ただしい中、マクロまでご提供いただき
ありがとうございました。
(マクロの威力を再認識させられました)

マクロ登録の自動起動で送信時のに登録するこ
とで、使用的にはバッチリです。


今年もいろいろと大変お世話になりました。
よいお年をお迎えください。



[ ]
RE:02822 【相談】本文の日付と曜日のチェNo.02832
TATE2 さん 11/01/05 14:20
 
TATEです。

明けましておめでとうございます。

早速ですが、ご提供いただいたマクロで恐縮なのですが、
1/5(水)と記載しているメールをマクロでチェック
すると、1/5(土)がただしいとエラーを返しますが
間違っているようです。

マクロの修正が直ぐに分からないので、取り急ぎご連絡
させていただきます。

時間がある時にでもご確認いただけると助かります。




[ ]
RE:02832 【相談】本文の日付と曜日のチェNo.02833
秀まるお さん 11/01/05 14:53
 
 すみません。FormatDateに渡す日付文字列がちょっと手抜きしてあって、うま
くいってませんでした。

 ちゃんとした形式で渡すようにマクロを直しました。これで大丈夫だと思いま
す。

    #xStart = x; #yStart = y;
    #readonly = readonly;
    #browsemode = browsemode;
    if( #browsemode ) {
        browsemodeswitch;
    }
    gofiletop;
    searchdown2 "[0-9]+/[0-9]+([日月火水木金土])", regular;
    if( !result ) {
        if( #browsemode ) {
            browsemodeswitch;
        }
        moveto #xStart, #yStart;
        endmacro;
    }
    #x = x; #y = y;
    if( #readonly ) {
        readonlyswitch;
    }
    beginsel;
    golineend2;
    tohankaku;
    $text = gettext( #x, #y, x, y );
    undo;
    moveto #x, #y;
    if( #readonly ) {
        readonlyswitch;
    }
    if( #browsemode ) {
        browsemodeswitch;
    }
    loaddll "hmjre.dll";
    #n = dllfunc("FindRegular"
                , "([0-9]+)/([0-9]+)\\(([日月火水木金土])\\)"
                , $text, 0);
    if( #n != 0 ) {
        endmacro;
    }
    $month = leftstr($text, dllfunc("GetLastMatchTagLength",1));
    $day = midstr($text, dllfunc("GetLastMatchTagPosition",2)
                    , dllfunc("GetLastMatchTagLength",2));
    $week = midstr($text, dllfunc("GetLastMatchTagPosition",3)
                    , dllfunc("GetLastMatchTagLength",3));
    #month = val($month);
    #day = val($day);

    loaddll "tkinfo.dll";
    #yearNow = val( dllfuncstr("CurrentDate","YYYY" ) );
    #monthNow = val( dllfuncstr("CurrentDate","M" ) );
    if( #month < #monthNow ) {
        #yearNow = #yearNow + 1;
    }
    $mon[1] = "Jan";
    $mon[2] = "Feb";
    $mon[3] = "Mar";
    $mon[4] = "Apr";
    $mon[5] = "May";
    $mon[6] = "Jun";
    $mon[7] = "Jul";
    $mon[8] = "Aug";
    $mon[9] = "Sep";
    $mon[10] = "Oct";
    $mon[11] = "Nov";
    $mon[12] = "Dec";
 $date = str(#day) + " " + $mon[#month] + " " + str(#yearNow)
         + " 00:00:00 +0900";
    message $date;
    $week2 = dllfuncstr("FormatDate", $date, "W" );
    if( $week2 != $week ) {
        message "曜日が違います。正しい曜日 = " + str(#month) + "/" +
        str(#day)
                 + "(" + $week2 + ")";
        #n = dllfunc("SetCancel", 1);
    }
    endmacro;

[ ]
RE:02833 【相談】本文の日付と曜日のチェNo.02834
TATE2 さん 11/01/05 21:15
 
TATEです。

早々に改訂版までご提示いただきありがとうございました。
早速、自動実行に登録し、動作バッチリです。

ただ、本文に日付け曜日が複数書かれている場合でも、エラー
チェックは1つ目だけのようですので、2つ目以降もチェック
できように、マクロの勉強がてら自力でマクロ改訂にチャレン
ジしてみようと考えています。
ついては、改訂の許可をいただけるでしょうか。



[ ]
RE:02834 【相談】本文の日付と曜日のチェNo.02835
秀まるお さん 11/01/06 08:57
 
 マクロはもちろん好きなように直して使っていただければいいし、copyright
も何も無い扱いでというか、TATEさんが作ったマクロだということにして誰か他
の人に教えてあげたり公開したりしていただいても何も問題無いです。

 とりあえずこちらで簡単に直したみた所では以下のようなマクロになりました。
簡単なテストしかしてないので、何かおかしい所があったらまたご指摘お願いし
たいですけども。

    #xStart = x; #yStart = y;
    #readonly = readonly;
    #browsemode = browsemode;
    if( #browsemode ) {
        browsemodeswitch;
    }
    gofiletop;
    searchdown2 "[0-9]+/[0-9]+([日月火水木金土])", regular;
    if( !result ) {
        if( #browsemode ) {
            browsemodeswitch;
        }
        moveto #xStart, #yStart;
        endmacro;
    }
    if( #readonly ) {
        readonlyswitch;
    }
Loop:
    #x = x; #y = y;
    beginsel;
    golineend2;
    tohankaku;
    $text = gettext( #x, #y, x, y );
    undo;
    moveto #x, #y;
    if( #readonly ) {
        readonlyswitch;
    }
    if( #browsemode ) {
        browsemodeswitch;
    }
    loaddll "hmjre.dll";
    #n = dllfunc("FindRegular"
                , "([0-9]+)/([0-9]+)\\(([日月火水木金土])\\)"
                , $text, 0);
    if( #n != 0 ) {
        endmacro;
    }
    $month = leftstr($text, dllfunc("GetLastMatchTagLength",1));
    $day = midstr($text, dllfunc("GetLastMatchTagPosition",2)
                    , dllfunc("GetLastMatchTagLength",2));
    $week = midstr($text, dllfunc("GetLastMatchTagPosition",3)
                    , dllfunc("GetLastMatchTagLength",3));
    #month = val($month);
    #day = val($day);

    loaddll "tkinfo.dll";
    #yearNow = val( dllfuncstr("CurrentDate","YYYY" ) );
    #monthNow = val( dllfuncstr("CurrentDate","M" ) );
    if( #month < #monthNow ) {
        #yearNow = #yearNow + 1;
    }
    $mon[1] = "Jan";
    $mon[2] = "Feb";
    $mon[3] = "Mar";
    $mon[4] = "Apr";
    $mon[5] = "May";
    $mon[6] = "Jun";
    $mon[7] = "Jul";
    $mon[8] = "Aug";
    $mon[9] = "Sep";
    $mon[10] = "Oct";
    $mon[11] = "Nov";
    $mon[12] = "Dec";
    $date = str(#day) + " " + $mon[#month] + " " + str(#yearNow)
         + " 00:00:00 +0900";
    $week2 = dllfuncstr("FormatDate", $date, "W" );
    if( $week2 != $week ) {
        message "曜日が違います。正しい曜日 = " + str(#month) + "/" +
        str(#day)
                 + "(" + $week2 + ")";
        #n = dllfunc("SetCancel", 1);
        endmacro;

    }

    searchdown "[0-9]+/[0-9]+([日月火水木金土])", regular;
    if( result ) {
  goto Loop;
 }

[ ]
RE:02835 【相談】本文の日付と曜日のチェNo.02836
TATE2 さん 11/01/06 14:56
 
TATEです。

ご配慮ありがとうございます。
また、さらにマクロも早々に改訂までしていただき、
ありがとうございました。勉強になります。

せっかくですので、すこしデバッグしたのですが、
以下のような月2桁数字のパターンでは、元々うま
くいかないようです。

10/13(木)
12/7(水)


[0-9]+/[0-9]の指定を直せばよさそうですが
うまい手がおもいつきません。

取り合えず、お知らせまで。




[ ]
RE:02836 【相談】本文の日付と曜日のチェNo.02837
秀まるお さん 11/01/06 16:09
 
 ちょっと難しいのですが、正規表現パターンを少しいじればなんとかなるよう
です。

    "[0-9]+/[0-9]+([日月火水木金土])"


 となってる部分(2箇所)を、

    "(?<=^|[^0-9])[0-9]+/[0-9]+([日月火水木金土])"

 にすれば、余計な物にはヒットしなくなりました。

[ ]
RE:02837 【相談】本文の日付と曜日のチェNo.02838
TATE2 さん 11/01/06 17:27
 
TATEです。

ご教示ありがとうございました。
何から何まで甘えてしまって申し訳ありませんでしたが
これでポカミスは防止できるようになりました。
(早速、曜日チェックに引っかかりました)


[ ]