|
いつも秀丸シリーズにはお世話になっております。
HarukAです。
GetMailTransmitDate関数を使って、表示範囲「最近の分」として表示されている数
字を求められるかどうか、教えていただけませんでしょうか。
ロジックとしては、「最近の分」で設定した日付の間に受信したメール数と、それに
該当しない未読メール数を足し合わせれば、「最近の分」として表示されている数字
と一致するのではないかと思ったのですが。。
上記『「最近の分」で設定した日付の間に受信したかどうか』の評価値としてGetMai
lTransmitDate関数で取得した日時を使用していますが、それが妥当かどうかという
ことがお伺いしたいことの趣旨です。
実際に上記ロジックでマクロを動かしてみると、大体は一致するのですが、一致しな
い場合もあります。(作成したロジックで求めた「最近の分」の方が、僅かに値が小
さくなります。)
経緯を以下に記します。
秀丸メールのマクロで、表示範囲が「最近の分」となっているメールを対象に、メー
リングリストの取得漏れをチェックするマクロを作成しようとしております。
特定のフォルダをSubjectで降順にソートし、SetMailIndex関数をwhile文でグルグル
と回してメーリングリスト番号の欠番を検出させるというものです。
(メーリングリスト番号はSubjectが[ml-name:00000]という形式であることが保証さ
れているので、数字部分が連番になっているかを確認することでチェックをします。)
そのwhile文のループ回数を「最近の分」のメール数だけ実行させたいので、何らか
の方法で現在開いているメールが「最近の分」に該当するか否かを判定する必要があ
ります。
マクロヘルプ内を検索しましたが、例えば"IsRecentMail"のような、期待する値を返
してくれそうな人は見当たりませんでした。
そこで、秀丸メールヘルプの「全般的な設定・メール一覧・表示範囲」を参考に、以
下のようなロジックで、開いているメールが「最近の分」に該当する場合は1を、し
ない場合は0を返却するサブルーチンを作成することにしました。
--------ロジック--------
●開いているメールが未読状態ならば、1を直ちに返却。
<既読の場合>
●CurrentDate関数で現在の日時を取得。(A)
●レジストリを開き、「最近の分」の設定日数を取得。(B)
●(A)と(B)を使い、「最近の分」リストを作成。(C)※1,2参照。
●GetMailTransmitDate関数で開いているメールの送受信日時を取得。(D)※1参照。
●(D)の日付が、リスト(C)内に含まれているかを検索。
HITした場合は1、HITしなかった場合は0を返却。
------------------------
※1
リスト(C)、及び(D)の書式は"YYYY/MM/DD"形式に揃えて比較しています。
時刻部分は評価していません。
※2
リスト(C)は配列構造で、見た目は以下のようになっています。
レジストリから取得した(B)の値 = N
(Index0)本日の日付
(Index1)本日の日付 - 1
(Index2)本日の日付 - 2
(Index3)本日の日付 - 3
・
・
(IndexN)本日の日付 - N
作成したサブルーチンを5000通(内、最近の分は500通程度)ほどのメールの束に対し
て走らせてみたところ、「最近の分」としてメール本体に表示されている数字と、サ
ブルーチン返却値の総和とが、一致する場合と不一致になる場合とがありました。
一致することの方が多いのですが、稀に「最近の分」の表示値に対して、サブルーチ
ン返却値の総和が-3程度小さくなります。
このことは作成したロジックが、本来「最近の分」と判断しなければならないところ
を「最近の分ではない」と誤判定したことを意味しますが、上記のようなロジックで
は最近の分か否かを正しく判定出来ないのでしょうか。
長文となり恐縮ですが、何か情報があればご教授いただけませんでしょうか。
よろしくお願いいたします。
|
|