変更してしまったSubjectをメール一覧上でNo.02634
hum2 さん 10/05/11 06:18
 
 お世話になります。humです。
また、些細なことが気になりまして...相談です。(長文すみません。)

 投稿先が違っていましたら、誘導下さい。移動いたします。

さて相談とは、(秀丸メール Ver.5.39β2)で変更してしまった Subjectを
検索フォルダのメール一覧上で選択して、新たに変更したいということです
が、残念ながら、自力ではマクロがつくれません。

検索フォルダの場合はメールは本来のフォルダ側で選択しなければ、 Subject
の変更はできないので、複数メールを選択しSubject の一括変更をしたい場合
は、どんな方法があるのでしょうか?もし、都合良くマクロで変更可能ならば
マクロ作成までして下さる奇特な方が居られれば、しばらくお付き合い頂けま
せんか?
よろしくお願いします。

         ↓検索フォルダのメール一覧上で検索された
変更前      ↓変更してしまったSubject のコピー例
         ↓
《発送日》   2009/10/25【TSUTAYA DISCAS】DVD/CD発送のお知らせ
《発送日》   2009/10/27【TSUTAYA DISCAS】DVD/CD発送のお知らせ
《発送日》   2009/10/27【TSUTAYA DISCAS】DVD/CD発送のお知らせ
《発送日》   2009/10/30【TSUTAYA DISCAS】DVD/CD発送のお知らせ
《返却日》   2009/10/25【TSUTAYA DISCAS】DVD/CD返却完了のお知らせ
《返却日》   2009/10/29【TSUTAYA DISCAS】DVD/CD返却完了のお知らせ
《返却日》   2009/10/29【TSUTAYA DISCAS】DVD/CD返却完了のお知らせ
《返却日》   2009/10/30【TSUTAYA DISCAS】DVD/CD返却完了のお知らせ
返却期限2009-11-04【TSUTAYA DISCAS】DVD/CD発送のお知らせ
返却期限2009-11-10【TSUTAYA DISCAS】DVD/CD発送のお知らせ
返却期限2009-12-31【TSUTAYA DISCAS】DVD/CD発送のお知らせ
返却期限2010-01-04【TSUTAYA DISCAS】DVD/CD発送のお知らせ
返却期限2010-02-15【TSUTAYA DISCAS】DVD/CD発送のお知らせ
返却期限2010-03-16【TSUTAYA DISCAS】DVD/CD発送のお知らせ
返却期限2010-03-24【TSUTAYA DISCAS】DVD/CD発送のお知らせ
返却期限2010-04-05【TSUTAYA DISCAS】DVD/CD発送のお知らせ
返却期限2010-05-02【TSUTAYA DISCAS】DVD/CD発送のお知らせ

変更後      ↓新たに変更したいSubject形式
         ↓
【TSUTAYA DISCAS】 2009/10/25 発送日
【TSUTAYA DISCAS】 2009/10/27 発送日
【TSUTAYA DISCAS】 2009/10/27 発送日
【TSUTAYA DISCAS】 2009/10/30 発送日
【TSUTAYA DISCAS】 2009/10/25 返却日
【TSUTAYA DISCAS】 2009/10/29 返却日
【TSUTAYA DISCAS】 2009/10/29 返却日
【TSUTAYA DISCAS】 2009/10/30 返却日
【TSUTAYA DISCAS】 2009-11-04 返却期限
【TSUTAYA DISCAS】 2009-11-10 返却期限
【TSUTAYA DISCAS】 2009-12-31 返却期限
【TSUTAYA DISCAS】 2010-01-04 返却期限
【TSUTAYA DISCAS】 2010-02-15 返却期限
【TSUTAYA DISCAS】 2010-03-16 返却期限
【TSUTAYA DISCAS】 2010-03-24 返却期限
【TSUTAYA DISCAS】 2010-04-05 返却期限
【TSUTAYA DISCAS】 2010-05-02 返却期限

検索フォルダにも[...]部分を省略表示するを実装頂きまして個人的には
大変便利に使わせて頂いています。(秀丸メール Ver.5.39β2)

├受信
│├TSUTAYA DISCAS("TSUTAYADISCAS", noreturn, target=subject), subfolder=1
││└返却期限    ("返却期限", noreturn, target=subject), subfolder=1

のようなフォルダ構成、検索条件式で検索フォルダを使っていますが
【TSUTAYA DISCAS】DVD/CD発送のお知らせ のようなSubjectが該当するので
Subjectから[...]を省略するやり方を指定するで、S】と設定すると
          ↓
DVD/CD発送のお知らせ のように省略表示されます。(当然ですが)
現在迄に【TSUTAYA DISCAS】を真ん中に変更してしまったSubjectが、
多くあるので、S】で省略すると意味が無くなりました。そこで、

          ↓変更してしまったSubject形式を、
《発送日》   2009/10/25【TSUTAYA DISCAS】DVD/CD発送
《返却日》   2009/10/25【TSUTAYA DISCAS】DVD/CD返却完了
返却期限2009-12-31【TSUTAYA DISCAS】DVD/CD発送
          ↓
          ↓変更したいSubject形式
          ↓
【TSUTAYA DISCAS】 2009/10/25 発送日
【TSUTAYA DISCAS】 2009/10/25 返却日
【TSUTAYA DISCAS】 2009-12-31 返却期限

の形式に検索フォルダのメール一覧上で選択したものすべてを変更したり、発送日、
返却日、返却期限毎に選択でもいいので再度変更したいのです。変更してしまった
Subjectは現在100件以上と数が多いので一つづつ手直しはやりたくありません。
メール一覧上で該当メールを一括範囲選択して変更でも、発送日、返却日、返却期限
毎に範囲選択して変更でも、できれば手間の少ない変更方法や似た動作をするマクロ
に心当たりがあれば、教えていただけないでしょうか。


##今まで、Subject表示列で返却期限2010-05-02 が目立つようにとあえて、Subject を
##返却期限2010-05-02【TSUTAYA DISCAS】DVD/CD発送のお知らせ と変更していた為に
##[...]部分を省略表示するとDVD/CD発送のお知らせ のようになって、省略すると意味
##が無くなります。
##【TSUTAYA DISCAS】返却期限2010-05-02 DVD/CD発送のお知らせ としていれば問題
##なかったのに、と悔やまれますがSubject 表示列で返却期限が分かるように変更して
##100件以上になります。(今更、一つづつ手直しはやりたくありません。)
##[...]部分を省略表示するを使わないと、Subject が長くて無駄な気がするし...
##そこで、変更してしまったSubject を古い物も含めてメール一覧上で選択して変更
したい
##のです。最悪、自分で、できなければ変更しないというのも手段として有りでしょ
うが...

[ ]
RE:02634 変更してしまったSubjectをメーNo.02635
秀まるお さん 10/05/11 09:10
 
 選択してるメールを対象に改変するマクロということならば、LockSelection/
EnumSelectionを使ってループさせつつ、BeginEditMail/SaveEditMailで改変し
たらいいと思います。

 テストしてたらそのものずばりのマクロになってしまいました。一応僕の所で
はこれでうまく動きました。検索フォルダ上でも動きます。

-----------------------------------------------------------------
    loaddll "tkinfo.dll";
    #count = dllfunc("SelectedMailCount");
    if( #count == 0 ) {
        endmacro;
    }
    #n = dllfunc("LockSelection");
    while(1) {
        #n = dllfunc("EnumSelection", 1);
        if( #n == 0 ) {
            break;
        }
        $subj = dllfuncstr("CurrentHeader", "Subject");
        if( leftstr( $subj, 8 ) == "返却期限"
         && midstr( $subj, 18, 2 ) == "【" ) {
            #n = dllfunc("BeginEditMail");
            $subj = midstr( $subj, 18, 999 );
            #n = dllfunc("SetHeader", "Subject", $subj );
            #n = dllfunc("SaveEditMail", 0, 0 );
        }
    }
    #n = dllfunc("UnlockSelection", 1);

-----------------------------------------------------------------

[ ]
RE:02635 変更してしまったSubjectをメーNo.02636
hum2 さん 10/05/11 11:40
 
 秀まるお様
 お世話になります。hum です。
わざわざ、マクロありがとうございました。
早速使わせて頂こうとしたら....何かエラーとなりました。

返却期限2010-05-02【TSUTAYA DISCAS】DVD/CD発送のお知らせ
         ↓
【TSUTAYA DISCAS】 2010-05-02 返却期限 のように変更される物と思っていましたが
         ↓
【TSUTAYA DISCAS】DVD/CD発送のお知らせ と20から25メールが変更されて

そのまま、エラーとなり希望とは違ってしまいました。

これは意図された動作でしょうか? 2010-05-02 返却期限を残す処理は
できないものなのでしょうか?

あと、dump.txtは別途送った方がよいでしょうか?

********** 10/05/11 10:43:17.744 5.39beta2  内部エラー、
pTitle=124383276 offStart=124342512 offEnd=124431916 offStar‐
t2=124342512 offEnd2=124431916 FileMan.cpp(5608) error = 87
Current thread dump eax=0000003B ebx=0012D24C ecx=0012DA50
edx=00000000 esi=0056A442 edi=000015E8 ebp=0012CD2C esp=0012CD1C
eip=7C94E514 eip: C3 8D A4 24 00 00 00 00 8D 64 24 00 HmCreate
= 010D6BF9
Stack Dump

[ ]
RE:02636 変更してしまったSubjectをメーNo.02637
秀まるお さん 10/05/11 13:01
 
 すみません。どう変えたいのかよる分からずにというか、とりあえず前の方の
文字列を削除すればいいのだろうと思って簡単にマクロを作ってしまいました。

 置換の処理の方は、midstrとかの関数でうまく操作するか、またはHmJre.dll
をロードして置換するといいかなぁと思いますけど、とりあえず無責任なことに
なるかもしれないのでそれ以上は口出ししないでおきます。

 それと、内部エラーが出てしまった件については、すみませんがdump.txtを僕
に送って欲しいです。"maruo@mitene.or.jp"宛にお願いします。

[ ]
RE:02636 変更してしまったSubjectをメーNo.02638
hum2 さん 10/05/11 13:42
 
 秀まるお様
 お世話になります。hum です。
> すみません。どう変えたいのかよく分からずにというか、とりあえず前の方の
>文字列を削除すればいいのだろうと思って簡単にマクロを作ってしまいました。
>
> 置換の処理の方は、midstrとかの関数でうまく操作するか、またはHmJre.dll
>をロードして置換するといいかなぁと思いますけど、とりあえず無責任なことに
>なるかもしれないのでそれ以上は口出ししないでおきます。

なるほど、そうでしたか。対応ありがとうございました。

> それと、内部エラーが出てしまった件については、すみませんがdump.txtを僕
>に送って欲しいです。"maruo@mitene.or.jp"宛にお願いします。

別途dump.txtを送りますので
よろしくお願いします。

[ ]
RE:02638 変更してしまったSubjectをメーNo.02639
秀まるお さん 10/05/11 14:51
 
 とりあえずマクロの内容的には、CurrentHeader関数で取得した$subjの内容を、

  leftstr midstr

  等の関数で中身を調べて加工して、みたいなことをすればいいと思います。

  全角文字は2桁分あるということだけ注意すればそんなに難しいことは無いと
思います。例えば、

   $subjの内容が

  "返却期限2009-11-04【TSUTAYA DISCAS】DVD/CD発送のお知らせ"

 のような内容ならば、

 leftstr( $subj, 8 )   には、"返却期限"という文字列が入り、
 midstr( $subj, 8, 10 ) には、"2009-11-04"という文字列が入り、
 midstr( $subj, 18, 999 ) には、その他の文字列が入ります。

 そんな感じでSubjectを分解して加工し、SetHeaderする、みたいなことをした
らいいんじゃないかと思います。

 それと、送っていただいたdump.txtは、マクロ自体はうまく動作してるような
んですが、マクロが終わってからマウスでメール一覧をクリックした瞬間に内部
エラーが出てしまっているようでした。なぜそうなるのか今のところまだ分かっ
てないですが、とりあえずマクロ自体はうまく動いてると思うので、エラーにな
った後に、右上の「再検索」ボタンを押す等していただければなんとか続行出来
ると思います。

 それともう1点、このテストをしていたら別のバグを見つけました。検索結果
の中の一番先頭のメールを含んで選択してマクロ実行すると、うまく置換しませ
んでした。これはこれでバグでして、また修正させていただきます。

[ ]
RE:02639 変更してしまったSubjectをメーNo.02640
秀まるお さん 10/05/11 16:23
 
 送っていただいたdump.txtの方の調査の方ですが、すみませんが原因が分から
ないです。

 何回かマクロ実行を繰り返して、最終的に、1通だけ選択してマクロ実行して、
その後別のメールをクリックして出てるようなんですけど、なぜそのタイミング
に限って出てるのかよく分からず…。2回目、3回目のエラーについては、一度
狂ってしまった検索結果上でメールを選択したがために、何回でも出てる、とい
うことなんだと思います。

 ということで、一度検索結果上で「再検索」ボタンを押していただくと、もう
起きなくなってくれたりしないかなぁと思ったりします。

 とりあえず、dump.txtに出力する情報をもっと増やすという形でお茶を濁す形
にさせていただきます。ということで、次のV5.39β3が出てそれで再現させてい
ただけましたら、またdump.txtを送っていただく、みたいな形でお願いしたいで
す。

[ ]
RE:02640 変更してしまったSubjectをメーNo.02641
hum2 さん 10/05/11 22:04
 
秀まるお様
 お世話になります。
> 何回かマクロ実行を繰り返して、最終的に、1通だけ選択してマクロ実行して、
>その後別のメールをクリックして出てるようなんですけど、なぜそのタイミング
>に限って出てるのかよく分からず…。2回目、3回目のエラーについては、一度
>狂ってしまった検索結果上でメールを選択したがために、何回でも出てる、とい
>うことなんだと思います。

├受信
│├TSUTAYA DISCAS("TSUTAYADISCAS", noreturn, target=subject), subfolder=1
││└返却期限    ("返却期限", noreturn, target=subject), subfolder=1

再現性は特定できないですが、TSUTAYA DISCAS フォルダでは同じエラーは発生せず、
返却期限フォルダでの検索結果上で「再検索」ボタンを押してからマウスで上方向に
スクロールした後一番先頭のメールを含んで選択してメールをクリックした瞬間か、
マクロ実行したタイミングで置換できず何回か同じエラーが発生しました。

>にさせていただきます。ということで、次のV5.39β3が出てそれで再現させてい
>ただけましたら、またdump.txtを送っていただく、みたいな形でお願いしたいで
>す。

度々、出るようならまたdump.txtを送ります。

[ ]
RE:02639 変更してしまったSubjectをメーNo.02642
hum2 さん 10/05/11 22:55
 
秀まるお様
 お世話になります。
>  全角文字は2桁分あるということだけ注意すればそんなに難しいことは
>無いと思います。例えば、
>
>   $subjの内容が
>
>  "返却期限2009-11-04【TSUTAYA DISCAS】DVD/CD発送のお知らせ"
>
> のような内容ならば、
>
> leftstr( $subj, 8 )   には、"返却期限"という文字列が入り、
> midstr( $subj, 8, 10 ) には、"2009-11-04"という文字列が入り、
> midstr( $subj, 18, 999 ) には、その他の文字列が入ります。
>
> そんな感じでSubjectを分解して加工し、SetHeaderする、みたいなことを
>したらいいんじゃないかと思います。

最初は、マクロヘルプの調べ方が悪いのか参考箇所がなかなか、
うまく見つけられませんでした。
最後は、時間はかかりましたが、何となく希望通りに変更できました。
大変有意義で貴重なアドバイス、ありがとうございました。

[ ]