検索でマクロ実行No.03864
hp さん 18/08/31 08:36
 
マクロは弄ったことがないのですが、マクロ関数にメール(の参照?)を渡して、関数
内でヘッダや本文から判断して、Trueを返したら検索条件に当てはまるというような
機能追加は可能でしょうか?

普段検索フォルダを振り分けの代わりにしていますが、振り分けのようなand/orの論
理演算ができないので、例えば、(from A and to B) or (from B and to A)のような
フォルダができません。

検索を強化して、振り分けと同じ仕組みで検索する機能でも良いのですが、どちらが
現実的でしょう?

検討していただければ幸いです。

[ ]
RE:03864 検索でマクロ実行No.03865
秀まるお2 さん 18/08/31 09:33
 
> マクロは弄ったことがないのですが、マクロ関数にメール(の参照?)を渡して、関
>数内でヘッダや本文から判断して、Trueを返したら検索条件に当てはまるというよ
>うな機能追加は可能でしょうか?

 仕組み的に困難だし、そもそも的に性能的にまったく使い物にならないと思います。

 普通に文字列検索する100倍とか1000倍とかの次元で遅くなると思います。

> 普段検索フォルダを振り分けの代わりにしていますが、振り分けのようなand/orの
>論理演算ができないので、例えば、(from A and to B) or (from B and to A)のよ
>うなフォルダができません。

 正規表現パターンのタグ付き正規表現のような形で特定のヘッダか何か取得できた
らいいかもしれません。テンプレートに似た仕組みでなんとか出来るかもしれません。

 テンプレートだと、たとえばFrom:のメールアドレスを取得するなら

 $(SetEmailOnly,$(CurrentHeader,From))

 で出来るのですが、たとえば正規表現パターンの中で

    (?#template:$(SetEmailOnly,$(CurrentHeader,From)))

 と指定したら、それが置き換わって検索されるとか・・・。

 ただ、こういう仕組みにしたとしても、たぶん10倍は遅くなるだろうという気は
します。

 もっと高速にってことなら、検索をする用のDLLを作ってもらってそれを秀丸メー
ルから呼び出すとか。

    (?#dll:OriginalSearch.dll)

 とか指定したら、そのDLLを呼び出すようにするとか。

 何かもっといいアイデアがあればいいですけども・・・。

 現状でマクロでなんとかするとしたら、1つ1つメールを選択しながらループする
ようなマクロで目的のメールを探し出すことは可能です。メールを選択するのは、Se
tMailIndex関数か、またはEnumSelection関数を使います。

[ ]
RE:03865 検索でマクロ実行No.03866
秀まるお2 さん 18/08/31 14:01
 
 すみません。1つ見逃してました。

> 検索を強化して、振り分けと同じ仕組みで検索する機能でも良いのですが、どちら
>が現実的でしょう?

 これはたしかにあるといいかもしれません。

 「追加の条件」の中で

  □ 振り分けにマッチ - [______________________________]

 ってして、振り分け条件が指定できるとか・・・。

 もうちょっと考えてみます。

[ ]
RE:03864 検索でマクロ実行No.03867
秀まるお2 さん 18/08/31 14:05
 
 矢継ぎ早のコメントですみません。

> 例えば、(from A and to B) or (from B and to A)のようなフォルダができません。

 検索ダイアログで指定できると思います。

 条件1:
  検索(S):  A
  対象(X):  差出人(From/Reply-To)

 条件2:
  検索(S):  B
  対象(X):  宛先(To/Cc/Bcc)

 で「and」指定するだけでいいような気がします。

 From:のメールアドレスがTo:にもあるとか、そういう指定をしたいって話だとした
ら、現状では無理ですけども。

[ ]
RE:03865 検索でマクロ実行No.03868
hp さん 18/08/31 14:43
 
> 普通に文字列検索する100倍とか1000倍とかの次元で遅くなると思います。

やはりマクロ処理は重いのですね。


>    (?#template:$(SetEmailOnly,$(CurrentHeader,From)))
> と指定したら、それが置き換わって検索されるとか・・・。

複数のヘッダの文字列を何らかの\nなどで区切って結合したようなものを対象にでき
る仕組みはどうですか。

特定のヘッダ内...に例えばTo:&From: と指定すると、「To: a@hoge.com, その他の
人@com\n From: b@hoge.com, その他の人@com」というような結合された文字列を対
象にできると正規表現で何かしらできそうです。

速度についてですが、扱いが難しいですが、例えば、現在の検索機能ですと、条件を
複数指定してand検索した場合、最初のを先に実行して当てはまらなければ、以降の
は実行しないというような仕組みになっているのかと思っているのですが、新規の遅
い検索機能を利用したい場合は、前段である程度絞ってから、利用するみたいなのは
どうでしょう。

[ ]
RE:03868 検索でマクロ実行No.03869
秀まるお2 さん 18/08/31 16:27
 
 後で03867番発言でコメントしたのですけども、

 「From:が何々で、To:が何々のメールを探したい」

 とかってことでしたら、現状の検索ダイアログで、「条件1」と「条件2」をandに
するだけでうまく指定できると思います。それでダメなのやら?

> 速度についてですが、扱いが難しいですが、例えば、現在の検索機能ですと、条件
>を複数指定してand検索した場合、最初のを先に実行して当てはまらなければ、以降
>のは実行しないというような仕組みになっているのかと思っているのですが

 たしかにそういう仕組みになっています。なので、条件1の方にはヒットしにくい
条件を指定するのがお得です。

 あと、「条件1」の方に限ってメールアドレス検索も指定可能でして、メールアド
レス検索を指定すれば、より高速になります。


> 新規の遅い検索機能を利用したい場合は、前段である程度絞ってから、利用するみ
>たいなのはどうでしょう。

 これの意味はよくわかりませんが、とりあえずユーザーさんの方で、条件1と条件2
のどっちにどっちを指定するか考えていただければ、速度的に有利に出来るとは思い
ます。

 「追加の条件」の方でフラグによる指定を併用するともっと高速になります。

[ ]
RE:03869 検索でマクロ実行No.03874
hp さん 18/09/03 09:39
 
> 後で03867番発言でコメントしたのですけども、
>
> 「From:が何々で、To:が何々のメールを探したい」
>
> とかってことでしたら、現状の検索ダイアログで、「条件1」と「条件2」をandに
>するだけでうまく指定できると思います。それでダメなのやら?

すみません、見落としてました。

しかし、やりたいのは

(from A and to B) or (from B and to A)

で、AさんとBさんのやりとりをまとめたいのです。

検索ダイアログでは4つの条件をすべてandするかorするかしかできないように見える
のですが、他にやり方がありますか?

やりたいのは、検索フォルダを振り分け代わりに使っているので、振り分け並に複雑
な論理演算を検索で行うことです。


>> 速度についてですが、扱いが難しいですが、例えば、現在の検索機能ですと、条
>件を複数指定してand検索した場合、最初のを先に実行して当てはまらなければ、以
>降のは実行しないというような仕組みになっているのかと思っているのですが


>> 新規の遅い検索機能を利用したい場合は、前段である程度絞ってから、利用する
>みたいなのはどうでしょう。
>
> これの意味はよくわかりませんが、

新規の遅い検索機能と言ったのは、マクロなり、To:&From:のようなヘッダを結合し
た文字列を対象としたりして、遅い検索機能を用意していただいた場合という意味で
す。

10、100倍遅いのであれば、番号の若い方の検索条件である程度絞ってからなら現実
的になるかと思ったのです。

[ ]
RE:03874 検索でマクロ実行No.03875
秀まるお2 さん 18/09/03 09:55
 
> (from A and to B) or (from B and to A)

 すみません。この「or」の意味をよく理解してませんでした。

 とりあえず的な解決策としては、現状の検索ダイアログでの「and/or」の所をカス
タム指定できるようにする案がありますけども、それでどうでしょうか。

 (条件1 and 条件2) or (条件3 and 条件4)

 (条件1 or 条件2) and (条件3 or 条件4)

 (条件1 and 条件2 and 条件3) or 条件4)

 (条件1 or 条件2 or 条件3) and 条件4)

 とか、いくつかパターンを用意しておいて、それを選択できるようにするとか。

 秀丸メール側の修正としても大したことは無いし、速度的にもこれが一番高速にな
ると思います。

 ダイアログボックスのデザインをどうするかは考えないといけないですが。

[ ]
RE:03875 検索でマクロ実行No.03876
秀まるお2 さん 18/09/03 10:55
 
 03868番発言の方もよく理解してませんでしたけど、こっちの案も対応可能でした。

> 複数のヘッダの文字列を何らかの\nなどで区切って結合したようなものを対象にで
>きる仕組みはどうですか。

 たとえば「対象(X):」の所に「すべてのヘッダのタブ区切り文字列」とかを追加す
ると、たとえば

From: A\tTo: B\t....

 のような文字列が渡されて、それに対して、たとえば正規表現で、

 (?=from:\sA\t.*)(?=to:\sB\t.*).

 とかで検索すればヒットするかなぁと思います。(うまくヒットするかどうかテス
トしてませんが)

 正規表現でなんとかしたいってことでしたらこっちの方がいいのかもしれません。

[ ]
RE:03876 検索でマクロ実行No.03877
秀まるお2 さん 18/09/03 11:22
 
>  (?=from:\sA\t.*)(?=to:\sB\t.*).
>
>  とかで検索すればヒットするかなぁと思います。

 それではダメで、

(?<=from:\s*A\t.*)(?<=to:\s*B\t.*).

 でヒットするようです。

[ ]
RE:03876 検索でマクロ実行No.03878
hp さん 18/09/03 16:58
 
> 03868番発言の方もよく理解してませんでしたけど、こっちの案も対応可能でした。
> たとえば「対象(X):」の所に「すべてのヘッダのタブ区切り文字列」とかを追加
>すると、たとえば
>From: A\tTo: B\t....
> のような文字列が渡されて、

個人的にはこちらの案の方を希望です。

速度的には、マクロよりは速くなりそうですか?

[ ]
RE:03878 検索でマクロ実行No.03879
秀まるお2 さん 18/09/03 17:35
 
 こっちの作戦で対応してみます。

> 速度的には、マクロよりは速くなりそうですか?

 マクロよりは速くなりますが、正規表現での

    (?<=.....)

 を多用すると、それはそれで遅くなります。

 ヘッダの並び順は固定にして、さらにはヘッダ全部じゃなくて、特定のヘッダだけ
しか対象にしないようにします。

 具体的には、対象ヘッダはfrom: reply-to: to: cc: bcc: subject: の6つだけに
しようと思います。ヘッダ名と中身の間の空白も無しにします。

 あと、タブ区切りじゃなくて、やっぱり「\n」= 改行区切りで大丈夫そうな気がし
てきました。たとえば

   from:A\nreply-to:.*\nto:b\n

 みたいにしてfrom = A かつ to = B のメールにヒットする正規表現パターンを簡
単に記述できるように出来そうな気がします。(reply-to:ヘッダがなくても空のrep
ly-toヘッダが入るという前提にして)

 そういう作戦でトライしてみます。

 何かこうしてほしい的なご意見がありましたらまたコメントください。

[ ]
RE:03879 検索でマクロ実行No.03880
hp さん 18/09/03 18:11
 
> ヘッダの並び順は固定にして、さらにはヘッダ全部じゃなくて、特定のヘッダだ
>けしか対象にしないようにします。
>
> 具体的には、対象ヘッダはfrom: reply-to: to: cc: bcc: subject: の6つだけ
>にしようと思います。ヘッダ名と中身の間の空白も無しにします。
>
> あと、タブ区切りじゃなくて、やっぱり「\n」= 改行区切りで大丈夫そうな気が
>してきました。たとえば
>
>   from:A\nreply-to:.*\nto:b\n

最初に思い描いたのは、「特定のヘッダ」を選ぶと、自分で「To:&From:」などを記
述するという仕組みでした。

セパレータを考える必要がありますが、body_noteachlineも何かの分類に使えたらと
思ってました。

固定の組み合わせパターンではなく、可変にするのは難しいでしょうか。

[ ]
RE:03880 検索でマクロ実行No.03881
秀まるお2 さん 18/09/03 23:37
 
 特定ヘッダの内容の場合でも簡略表示ヘッダもそうなんですが、検索の仕組み的に、
ヘッダ1つずつのテキストデータを生成して、それに対してヒットするかどうかを繰
り返す動作になってます。

 今思ったんですけども、「特定ヘッダの内容」とは別に「特定ヘッダの連結文字
列...」って設定を追加して、たとえば特定ヘッダに「From:/To:」と指定すると、


 From:....\nTo:  ....\n


 みたいな1つの文字列を生成してそれに対して1回の検索をかけるような、そうい
う風にしたらいいような気がしてきました。

 そういう風にするってことでいいでしょうか。

> body_noteachlineも何かの分類に使えたらと思ってました。

 上記仕組みにすれば、ヘッダ名の1つとしてそういうキーワード指定すればってこ
とも可能そうな気がします。

[ ]
RE:03881 検索でマクロ実行No.03887
hp さん 18/09/05 17:17
 
> そういう風にするってことでいいでしょうか。

はい。その作戦でお願いします。

[ ]
RE:03887 検索でマクロ実行No.03889
秀まるお2 さん 18/09/05 17:32
 
 ちなみにヘッダ名に"body"を指定したらメール本文も入るようにしました。

 たとえば

From: a
To: b

(本文=)ああああ
いいいい

 のようなメールがあると、"From:/To:"と指定したら、

   from:a\nto:b\n

 のような文字列が検索対象文字列となります。"From:/body"と指定すると、

 from:a\nああああ\nいいいい\n

 のような文字列になります。

 さらに、"@From:/To:"のように指定すると、ヘッダの中身をメールアドレスのみに
変換します。たとえば@To:と指定すると、

To: aaa <aaa@aaa>, bbb <bbb@bbb>

 となってるメールの場合に、

   to:aaa@aaa,bbb@bbb\n

 のような文字列を生成します。検索の例もいろいろヘルプに追加しました。

 明日アップロードできると思います。少々お待ちください。

[ ]
RE:03889 検索でマクロ実行No.03893
hp さん 18/09/06 09:23
 
> さらに、"@From:/To:"のように指定すると、ヘッダの中身をメールアドレスのみ
>に変換します。

これは非常に使いやすいですね。

うちの管理者がアホで、office365のアドレス帳の名前に"namae,shimei/名前 氏名"
という名前をつけやがって、ユーザーからは変更できないので、助かります。

[ ]