【質問】メールの題名■以降の部分を取りNo.02623
hum2 さん 10/05/01 07:12
 
 お世話になります。humです。
   【質問】メールの題名■以降の部分を取り出し、現在日付/時刻部分
   だけ置換更新したい■以降の部分は置換後に末尾に戻す

   ★置換前のSubject:   【連絡】2010年05月01日(土) 05:17:21■この題名部分は
不定ほげほげ

   ★置換後のSubject:   【連絡】2010年05月04日(火) 06:00:10■この題名部分は
不定ほげほげ

   毎回置換更新後の体裁は現在日付/時刻部分は置換更新するが■以降の部分は選ぶ
メール毎に
   違っても置換後には末尾に戻す。同じメールを複数回置換したい場合もある。
   と思ってトライしているのですが、1回置換する事までしか思い浮かばずうまく
いきません。

   同じメールを何回も置換したいので続けて実行すると題名が連結され増えていく
ばかりです。
   【連絡】2010年05月01日(土) 06:10:37■【連絡】2010年05月01日(土) 05:17:21
■この題名部分は不定ほげほげ
   【連絡】2010年05月01日(土) 06:12:47■【連絡】2010年05月01日(土) 06:12:40
■【連絡】2010年05月01日(土) 05:17:21■この題名部分は不定ほげほげ

   【連絡】2010年05月02日(日) 05:46:36■この題名部分は不定ほげほげ
   ■この題名部分は不定ほげほげをどう取り扱えば、何回置換しても

   ★置換後のSubject:   【連絡】2010年05月04日(火) 06:00:10■この題名部分は
不定ほげほげ

   のように使えますか?方法をおわかりの方、ぜひ教えていただけませんか。
   秀丸メール   Ver.5.33β1
   以下、トライしたマクロです。
//------------------------------------------------------------------
    loaddll "TKInfo.dll";
    $subject = dllfuncstr( "CurrentHeader",  "Subject:" );  // メールのヘッ
ダ部分から題名部分を取得
    $date = dllfuncstr("CurrentDate","YYYY年MM月DD日(W) hh:mm:ss"); // 現在
日付/時刻の取得
                           // Subjectに【連絡】YYYY年MM月DD日(W) hh:mm:ss+ "
■" + 元題名部分を置換
    #n = dllfunc("SetHeader","Subject","【連絡】" + $date + "■" + $subject);
    #n = dllfunc("AlterSave");                                      // 現在
編集中のメールを改変保存
    #n = dllfunc("SetMailFlag", "altered", 0);                      // 改変
されたかどうか改変マークOFF
    endmacro;                                                       // 現在
のマクロの実行を終了
//------------------------------------------------------------------

--
hum
2010年05月01日(土) 07:00:32
Windows XP Pro SP3
秀丸メール   Ver.5.39β1
秀丸エディタ Ver.8.01β4

[ ]
RE:02623 【質問】メールの題名■以降の部No.02624
K'zawa さん 10/05/01 09:45
 
hum2さん、こんにちは。
K'zawa/ユーザーです。

取り除きたい文字列が固定長なら、秀丸まくろ関数の、strstrを使って、
「【連絡】20」があるか確認、あれば、leftstr/midstr/rightstrを使って
必要な部分を取り出す。
偶然、件名に「【連絡】20」があると困りますが。

もっと確実にするには、

秀丸メール マクロヘルプの「LoadDll, DllFunc, FreeDll関数(TKInfo.
dll)」
HmJre.chmの「マクロからのdllfunc呼び出し」

を参考に、取り除きたい文字列を検索してやるとよいです。

[ ]
RE:02624 【質問】メールの題名■以降の部No.02625
hum2 さん 10/05/01 14:35
 
 "K'zawa"様
 お世話になります。hum です。
アドバイスありがとうございます。
また【質問】の仕方がヘタですみません。
自分で読み返しても「何がやりたいの?」と考え込む程
レベル低い書込みでした。

最近珍しく「やる気熱」があったので、深く考えず連続投稿
してしまいました。今後は何でも「マクロ」と焦らずに、
「何がやりたいの?」を考えたいと思います。

当面、必要なら事前に題名をクリップボードにコピーしておき
マクロ実行時に題名を作成し、クリップボード履歴の内容を戻す
不要部分を手動でカットでもいいかなと思います。
エレガントでは無いですが....運用上は困らないかもと思います。

// 以下、トライしたマクロです。
//------------------------------------------------------------------
    loaddll "TKInfo.dll";
    $subject = dllfuncstr( "CurrentHeader",  "Subject:" );  // メールのヘッ
ダ部分から題名部分を取得
    $date = dllfuncstr("CurrentDate","YYYY年MM月DD日(W) hh:mm:ss"); // 現在
日付/時刻の取得
    $dateFind = "[0-9]{4}年[0-9]{2}月[0-9]{2}日\\([月火水木金土日]\\) [0-9]
{2}:[0-9]{2}:[0-9]{2}";
    #x = x; #y = y;
    gofileend;
    replaceall $dateFind, $date, regular, casesense;
    if( !result ) {
        question "文中の現在日付/時刻の置換に失敗しました。" +
                 "中断します。";
        if( result == yes ) {
            #n = dllfunc("SetCancel", 1);
        }
    }
    moveto #x, #y;
                           // Subjectに【連絡】YYYY年MM月DD日(W) hh:mm:ss+ "■"
    #n = dllfunc("SetHeader","Subject","【連絡】" + $date + "■" + $subject);
    #n = dllfunc("AlterSave");                                      // 現在
編集中のメールを改変保存
    #n = dllfunc("SetMailFlag", "altered", 0);                      // 改変
されたかどうか改変マークOFF
    endmacro;                                                       // 現在
のマクロの実行を終了
//------------------------------------------------------------------

[ ]
RE:02625 【質問】メールの題名■以降の部No.02626
K'zawa さん 10/05/01 16:04
 
hum2さん、こんにちは。
K'zawaです。

下のようにすればいいのでは。
なおこの例では、日本語メールでないと化けるかも。
    loaddll "TKInfo.dll";
    $subject = dllfuncstr( "CurrentHeader",  "Subject:" );  // メールの
ヘッダ部分から題名部分を取得
    if( strstr($subject, "【連絡】20") == 0 ) {
        $subject = rightstr($subject, strlen($subject) - 37);
    }
    $date = dllfuncstr("CurrentDate","YYYY年MM月DD日(W) hh:mm:ss"); //
現在日付/時刻の取得
// 以下省略

[ ]
RE:02625 【質問】メールの題名■以降の部No.02627
h-tom さん 10/05/01 16:37
 

h-tom です。

>    replaceall $dateFind, $date, regular, casesense;

秀丸メールのマクロのヘルプに、
> 秀丸メールでは「ファイルの先頭」に相当するのは本文の先頭なので、
> replaceall文ではヘッダ部分の置換がされません。
と、あるので、K'zawaさんみたいに、取得したヘッダを直接編集しないと、
ダメでしょうね。

[ ]
RE:02626 【質問】メールの題名■以降の部No.02628
hum2 さん 10/05/01 16:55
 
 "K'zawa"様
 お世話になります。hum です。
ご教示頂きありがとうございます。
使わせて頂くべく早速試しました....
当方マクロの理解能力は低いので、応用が効きません。
そのまま全文掲載頂かないと...しばらくお付き合い頂けますか?

現状は
編集モードで当該メールを開いて、何回マクロを実行しても
題名中の現在日付/時刻の置換に失敗しました。中断します。

置換後の体裁は、置換前と変化しません...
(ある意味希望通りですが、)
題名とメール文中にある日付/時刻を現在の日付/時刻に置換したい
のですが、文中にある日付/時刻は置換できても、
題名中の現在日付/時刻の置換に失敗します。
はて、どこを直せばよいのやら?ここから先がわかりません。

当該メール
Subject:  【連絡】2010年05月01日(土) 16:16:49■

マクロ実行後
Subject:  【連絡】2010年05月01日(土) 16:16:49■

[ ]
RE:02628 【質問】メールの題名■以降の部No.02629
hum2 さん 10/05/01 17:11
 
 "K'zawa"様 "h-tom"様
 お世話になります。hum です。
投稿した後、挿入位置を見直したらできました。
ありがとうございました。

仕組みは理解できていませんが、

    replaceall $dateFind, $date, regular, casesense;

でも、今回は利用できちゃいました。
お騒がせしました。

[ ]