マクロサンプルNo.12563
秀まるお2 さん 24/05/13 11:05
 
 秀丸マクロ会議室(4番会議室)のhutecさんの話の続きになります。

 メール本文の中にある

    KW:(......)

 のような内容の括弧の中身をファイル名にしてエクスポートするマクロのサンプル
になります。正規表現での前方一致指定と後方一致指定を使って括弧の中身文字列を
範囲選択して取り出すマクロになります。

 正規表現のテストをするなら、

    (?<=^KW:\().*(?=\)$)

 のようなパターンでテストできると思います。

 サンプルマクロは対象アカウント名と保存先のフォルダが適当というか、僕の所で
の例になってます。そこは修正が必要です。

---------------------------------------サンプルマクロ-----------------------
------
    loaddll "tkinfo.dll";
    #n = dllfunc("SelectFolder", "hideo@hidenet(テスト用)", "受信");        
//ここは修正が必要。
    #n = dllfunc("SetViewArea", 0);     //範囲 = 全体
    #count = dllfunc("MailCount");          //フォルダの中のメールの数
    if( #count == 0 ) {
        endmacro;
    }
    #n = dllfunc("SetThreadView", 0);       //スレッド表示になってるなら一覧
表示にする。
    #i = 0;
    #browsemode = browsemode;
    if( #browsemode ) {
        browsemodeswitch;       //文字カーソル表示させる。
    }
    setcompatiblemode 0x00020000;           //マクロ終了後に検索条件を戻す。
    setcompatiblemode 0x00000200;           //searchdown2で見つけた文字列を
範囲選択する。
    #saveCount = 0;

    while( #i < #count) {
        #n = dllfunc("SetMailIndex", #i);

        //ここにメールのエクスポートの処理を書く。
        //例:
        gofiletop;
        searchdown2 "(?<=^KW:\\().*(?=\\)$)", regular, casesense;
        if( result ) {
            //見つけた場合のみ
            $filename = gettext( seltopx, seltopy, selendx, selendy );
            $filename = dllfuncstr("ValidateForFileName", $filename);
            $filename = "e:\\temp\\" + $filename + ".eml";          //保存先
フォルダは書き換えが必要。
            //message "エクスポートするファイル名 = " + $filename;
            $subject = dllfuncstr("ValidateForFileName", $subject);
            #n = dllfunc("Export", $filename, "eml-unique", "encode-attach-h
tml", "orikaeshi","truncate");
                        //形式 = emlの固有ファイル名
                        //添付ファイルもHTMLメールもエンコードして出力。
                        //
                        //"truncate" ... 同じ名前のファイルは上書きしてしまう。
            #saveCount = #saveCount + 1;
        } else {
            //"KW:"の無いメールは無視。
        }
        #i = #i + 1;
    }
    if( #browsemode ) {
        browsemodeswitch;       //文字カーソル表示を元に戻す。
    }
    message str( #saveCount ) + " 通のメールをエクスポートしました。";

[ ]
RE:12563 マクロサンプルNo.12569
hutec さん 24/05/16 14:28
 
秀丸先生の仕事が速すぎてこちらの検証が間に合いませんでした。

まずは、お礼を申し上げます。

引き続き宜しくお願いします。

[ ]