一括削除につきましてNo.04084
梅吉君 さん 99/09/30 15:03
 
以下のようにメイルを頂きましたので早速掲載させていただきます。

「秀丸にはマクロ機能があり、これを使えば複雑な操作をプログラムして動かすこと
ができ
ます。」

テキストファイルに10000件のメイルアドレスが保存してあるのですが、
この10000件のアドレスから、特定の300件のメイルアドレスを削除したいと
きに
今迄は1件、1件検索して300件削除していたのですが、一度に削除する方法がな
いで
しょうか?

マクロを使って出来るのではないでしょうか?というお話を聞きましたが
良い方法はあるでしょうか?
マクロについての知識はないのですが、、、

梅吉君


[ ]
RE:04084 一括削除につきましてNo.04085
番頭++ さん 99/09/30 15:29
 
>テキストファイルに10000件のメイルアドレスが保存してあるのですが、
>この10000件のアドレスから、特定の300件のメイルアドレスを削除したい
>ときに
>今迄は1件、1件検索して300件削除していたのですが、一度に削除する方法が
>ないで
>しょうか?

どんな感じのデータでしょうか ???
メールアドレスの文字列をデタラメにして示してください。

削除の判断ですが、削除の条件も必要です ???

人間が判断して、削除するのであれば手作業と同じです ...

削除マーク (例:##) を先頭につけて、置換することは可能です。

##xxxxxxx@nifty.ne.jp

^##.*\n をヌルで正規表現の全置換をするとすべて削除されます。

[ ]
RE:04085 一括削除につきましてNo.04086
梅吉君 さん 99/09/30 15:41
 
>>テキストファイルに10000件のメイルアドレスが保存してあるのですが、
>>この10000件のアドレスから、特定の300件のメイルアドレスを削除したい
>ときに
>>今迄は1件、1件検索して300件削除していたのですが、一度に削除する方法が
>ないで
>>しょうか?
>
>どんな感じのデータでしょうか ???
>メールアドレスの文字列をデタラメにして示してください。
>
>削除の判断ですが、削除の条件も必要です ???
>
>人間が判断して、削除するのであれば手作業と同じです ...
>
>削除マーク (例:##) を先頭につけて、置換することは可能です。
>
>##xxxxxxx@nifty.ne.jp
>
>^##.*\n をヌルで正規表現の全置換をするとすべて削除されます。

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

お返事ありがとうございます

例えば、、、

-------------------------------
xxx@mail.goo.ne.jp
xxxxxxx@fortune.vip.co.jp
xxx@fortune.vip.co.jp
xxxxx@fortune.vip.co.jp
xxx@fortune.vip.co.jp
xxxxxxx@fortune.vip.co.jp

ずっと続きます

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

こんな感じで1万件並んでいます。

ここから

xxx@mail.goo.ne.jp
xxxxx@fortune.vip.co.jp

以上の2件を削除するような場合です

梅吉君


[ ]
RE:04086 一括削除につきましてNo.04087
番頭++ さん 99/09/30 15:44
 
削除するデータのファイルがあって、
それを原本のファイルから削除できれば良いのですか ???

[ ]
RE:04086 一括削除につきましてNo.04088
梅吉君 さん 99/09/30 15:49
 
>>>テキストファイルに10000件のメイルアドレスが保存してあるのですが、
>>>この10000件のアドレスから、特定の300件のメイルアドレスを削除した
>いときに
>>>今迄は1件、1件検索して300件削除していたのですが、一度に削除する方法
>がないで
>>>しょうか?
>>
>>どんな感じのデータでしょうか ???
>>メールアドレスの文字列をデタラメにして示してください。
>>
>>削除の判断ですが、削除の条件も必要です ???
>>
>>人間が判断して、削除するのであれば手作業と同じです ...
>>
>>削除マーク (例:##) を先頭につけて、置換することは可能です。
>>
>>##xxxxxxx@nifty.ne.jp
>>
>>^##.*\n をヌルで正規表現の全置換をするとすべて削除されます。
>
>----------------------------------------------------------------
>
>お返事ありがとうございます
>
>例えば、、、
>
>-------------------------------
>xxx@mail.goo.ne.jp
>xxxxxxx@fortune.vip.co.jp
>xxx@fortune.vip.co.jp
>xxxxx@fortune.vip.co.jp
>xxx@fortune.vip.co.jp
>xxxxxxx@fortune.vip.co.jp
>
>ずっと続きます
>
>------------------------------
>
>こんな感じで1万件並んでいます。
>
>ここから
>
>xxx@mail.goo.ne.jp
>xxxxx@fortune.vip.co.jp
>
>以上の2件を削除するような場合です
>
>梅吉君
>
----------------------------------------------------------------
削除するデータのファイルがあって、
それを原本のファイルから削除できれば良いのですか ???
----------------------------------------------------------------

まったくその通りです

梅吉君


[ ]
RE:04088 一括削除につきましてNo.04090
梅吉君 さん 99/09/30 16:17
 
>>>>テキストファイルに10000件のメイルアドレスが保存してあるのですが、
>>>>この10000件のアドレスから、特定の300件のメイルアドレスを削除した
>いときに
>>>>今迄は1件、1件検索して300件削除していたのですが、一度に削除する方法
>がないで
>>>>しょうか?
>>>
>>>どんな感じのデータでしょうか ???
>>>メールアドレスの文字列をデタラメにして示してください。
>>>
>>>削除の判断ですが、削除の条件も必要です ???
>>>
>>>人間が判断して、削除するのであれば手作業と同じです ...
>>>
>>>削除マーク (例:##) を先頭につけて、置換することは可能です。
>>>
>>>##xxxxxxx@nifty.ne.jp
>>>
>>>^##.*\n をヌルで正規表現の全置換をするとすべて削除されます。
>>
>>----------------------------------------------------------------
>>
>>お返事ありがとうございます
>>
>>例えば、、、
>>
>>-------------------------------
>>xxx@mail.goo.ne.jp
>>xxxxxxx@fortune.vip.co.jp
>>xxx@fortune.vip.co.jp
>>xxxxx@fortune.vip.co.jp
>>xxx@fortune.vip.co.jp
>>xxxxxxx@fortune.vip.co.jp
>>
>>ずっと続きます
>>
>>------------------------------
>>
>>こんな感じで1万件並んでいます。
>>
>>ここから
>>
>>xxx@mail.goo.ne.jp
>>xxxxx@fortune.vip.co.jp
>>
>>以上の2件を削除するような場合です
>>
>>梅吉君
>>
>----------------------------------------------------------------
>削除するデータのファイルがあって、
>それを原本のファイルから削除できれば良いのですか ???
>----------------------------------------------------------------
>
>まったくその通りです
>
>梅吉君
>
----------------------------------------------------------------
追加です、、、
原本のファイルがあって削除するデータファイルがあって
原本のファイルから削除する場合に、万が一原本にはない
アドレスがあって削除できなかった場合に、どの
アドレスが削除できなかったのかも判断できるのでしょうか?

梅吉君






[ ]
RE:04090 一括削除につきましてNo.04091
番頭++ さん 99/09/30 16:59
 
>>----------------------------------------------------------------
>>削除するデータのファイルがあって、
>>それを原本のファイルから削除できれば良いのですか ???
>>----------------------------------------------------------------
>>
>>まったくその通りです
>>
>----------------------------------------------------------------
>追加です、、、
>原本のファイルがあって削除するデータファイルがあって
>原本のファイルから削除する場合に、万が一原本にはない
>アドレスがあって削除できなかった場合に、どの
>アドレスが削除できなかったのかも判断できるのでしょうか?

//*5    KZ_MtDel1.mac - 1999/09/30 - K.Nakatake
//  連続削除マクロ
//  削除の対象となるファイルを開いてこのマクロを実行する。
//      先頭はダミーのデータ、または改行だけを入れてください。
//  削除メタデータファイル ==> directory2 + "\\DelMeta1.txt" - カレントディ
レクトリ。
//      改行だけのデータを入れないでください。

    if( code == 0x09 ){ endmacroall;    }   //  debug
    $searchbuffer = searchbuffer;   #searchoption = searchoption;
    $str_f1 = filename2;
    if( ! selecting ){
        gofiletop;  #x_start = x;   #y_start = y;
    } else {
        #x_start = seltopx; #y_start = seltopy;
    }
    while( true ){
        if( $str_f2 == "" ){
            $str_f2 = directory2 + "\\DelMeta1.txt";
        }
        $str_f2 = input("削除メタデータファイルを指定してください ?",$str_f2);
        if( ( ! result ) || $str_f2 == "" ){    endmacro;   }
        if( existfile($str_f2) ){   //  ファイルの存在チェック
            break;
        }
    }
    setclipboard "";
    if( findhidemaru($str_f2) == -1 ){
        openfile "/h " + $str_f2;   #sw_f2 = 1; //  こちらのほうが速いです。
    //  openfile $str_f2;   #sw_f2 = 1;
    } else {
        #handle2 = hidemaruhandle( findhidemaru( $str_f2 ) );
        setactivehidemaru #handle2;
    }
    gofiletop;  //  $str_f2
    while( code != eof ){
        beginsel;   golineend2;
        $wk1 = gettext(seltopx,seltopy,selendx,selendy);    escape;
        right;
        #handle1 = hidemaruhandle( findhidemaru( $str_f1 ) );
        setactivehidemaru #handle1;
        title $wk1 + " - を処理中です";
        call pp_s1;
    //T disableinvert;  disabledraw;
        #handle2 = hidemaruhandle( findhidemaru( $str_f2 ) );
        setactivehidemaru #handle2;
    }
    #handle1 = hidemaruhandle( findhidemaru( $str_f1 ) );
    setactivehidemaru #handle1;
    if( #sw_f2 ){
        closehidemaruforced hidemaruhandle(findhidemaru($str_f2));
    }
    moveto 0, #y_start;
    enableinvert;   enabledraw; title 0;
    message str(#del) + " - 件を削除しました。";
    if( #del_n ){
        message str(#del_n) + " - 件は削除出来ませんでした。";
    }
    setsearch $searchbuffer, #searchoption;
endmacro;

pp_s1:
    gofiletop;
    while( true ){
        searchdown $wk1;
        if( ! result ){
        //  enableinvert;   enabledraw;
            message $wk1 + " - は見つかりませんでした !";
            addclipboard $wk1 + "\n";   //  クリップボードに書いておく
            #del_n = #del_n + 1;
            return 1;
        } else {
            if( x == 0 ){
                beginsel;   golineend2;
                $wk2 = gettext(seltopx,seltopy,selendx,selendy);    escape;
                if( $wk1 == $wk2 ){
                    deleteline; #del = #del + 1;
                    return 0;
                }
            }
        }
    }
return 0;
// end of macro.

こんなマクロになると思います。テストしてください。


[ ]
RE:04091 一括削除につきましてNo.04092
梅吉君 さん 99/09/30 17:56
 
>
>//*5    KZ_MtDel1.mac - 1999/09/30 - K.Nakatake
>//  連続削除マクロ
>//  削除の対象となるファイルを開いてこのマクロを実行する。
>//      先頭はダミーのデータ、または改行だけを入れてください。
>//  削除メタデータファイル ==> directory2 + "\\DelMeta1.txt" - カレントディ
>レクトリ。
>//      改行だけのデータを入れないでください。
>
>    if( code == 0x09 ){ endmacroall;    }   //  debug
>    $searchbuffer = searchbuffer;   #searchoption = searchoption;
>    $str_f1 = filename2;
>    if( ! selecting ){
>        gofiletop;  #x_start = x;   #y_start = y;
>    } else {
>        #x_start = seltopx; #y_start = seltopy;
>    }
>    while( true ){
>        if( $str_f2 == "" ){
>            $str_f2 = directory2 + "\\DelMeta1.txt";
>        }
>        $str_f2 = input("削除メタデータファイルを指定してください ?",$str_f2);
>        if( ( ! result ) || $str_f2 == "" ){    endmacro;   }
>        if( existfile($str_f2) ){   //  ファイルの存在チェック
>            break;
>        }
>    }
>    setclipboard "";
>    if( findhidemaru($str_f2) == -1 ){
>        openfile "/h " + $str_f2;   #sw_f2 = 1; //  こちらのほうが速いです。
>    //  openfile $str_f2;   #sw_f2 = 1;
>    } else {
>        #handle2 = hidemaruhandle( findhidemaru( $str_f2 ) );
>        setactivehidemaru #handle2;
>    }
>    gofiletop;  //  $str_f2
>    while( code != eof ){
>        beginsel;   golineend2;
>        $wk1 = gettext(seltopx,seltopy,selendx,selendy);    escape;
>        right;
>        #handle1 = hidemaruhandle( findhidemaru( $str_f1 ) );
>        setactivehidemaru #handle1;
>        title $wk1 + " - を処理中です";
>        call pp_s1;
>    //T disableinvert;  disabledraw;
>        #handle2 = hidemaruhandle( findhidemaru( $str_f2 ) );
>        setactivehidemaru #handle2;
>    }
>    #handle1 = hidemaruhandle( findhidemaru( $str_f1 ) );
>    setactivehidemaru #handle1;
>    if( #sw_f2 ){
>        closehidemaruforced hidemaruhandle(findhidemaru($str_f2));
>    }
>    moveto 0, #y_start;
>    enableinvert;   enabledraw; title 0;
>    message str(#del) + " - 件を削除しました。";
>    if( #del_n ){
>        message str(#del_n) + " - 件は削除出来ませんでした。";
>    }
>    setsearch $searchbuffer, #searchoption;
>endmacro;
>
>pp_s1:
>    gofiletop;
>    while( true ){
>        searchdown $wk1;
>        if( ! result ){
>        //  enableinvert;   enabledraw;
>            message $wk1 + " - は見つかりませんでした !";
>            addclipboard $wk1 + "\n";   //  クリップボードに書いておく
>            #del_n = #del_n + 1;
>            return 1;
>        } else {
>            if( x == 0 ){
>                beginsel;   golineend2;
>                $wk2 = gettext(seltopx,seltopy,selendx,selendy);    escape;
>                if( $wk1 == $wk2 ){
>                    deleteline; #del = #del + 1;
>                    return 0;
>                }
>            }
>        }
>    }
>return 0;
>// end of macro.
>
>こんなマクロになると思います。テストしてください。
>

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

ありがとうございます
試してみます

梅吉君

[ ]
RE:04092 一括削除につきましてNo.04093
番頭++ さん 99/09/30 18:38
 
存在チェックして、後で削除する場合には、
KZ_MtDel1.mac を KZ_MtDel2.mac にコピーして。次の 1 行を、

deleteline; #del = #del + 1;

以下の 2 行のように変更してください。そうすると削除は行われなくなります。

// deleteline; // 削除しない
#del = #del + 1;

[ ]
RE:04093 一括削除につきましてNo.04094
梅吉君 さん 99/09/30 19:58
 
>存在チェックして、後で削除する場合には、
>KZ_MtDel1.mac を KZ_MtDel2.mac にコピーして。次の 1 行を、
>
>deleteline; #del = #del + 1;
>
>以下の 2 行のように変更してください。そうすると削除は行われなくなります。
>
>// deleteline; // 削除しない
>#del = #del + 1;

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

素晴らしいですね、
一日中かけて削除をしていたのが信じられないくらいです

試してみました。
最後に、検索画面が出てきてキャンセルを押しても画面が
終わらないのですが、これはどのように対処したらよいでしょうか?

5件削除しました。実際は3件削除できなかったのですが
7件削除出来ませんでした、、、
と言う表示が出てきましたが

梅吉君

[ ]
RE:04094 一括削除につきましてNo.04095
梅吉君 さん 99/09/30 20:39
 

>5件削除しました。実際は3件削除できなかったのですが
>7件削除出来ませんでした、、、
>と言う表示が出てきましたが
>

補足です

・原本=22件のアドレス
・削除=8件のアドレス(3件は検索できないアドレス)

で試してみました

梅吉君

[ ]
RE:04095 一括削除につきましてNo.04096
梅吉君 さん 99/09/30 20:42
 

原因が分かりました
改行だけのデータがあったためでした

すいませんでした

梅吉君

[ ]
RE:04096 一括削除につきましてNo.04099
番頭++ さん 99/10/01 12:03
 
    if( $wk1 != ""){    //  改行だけは無視する // 追加
        title $wk1 + " - を処理中です";
        call pp_s1;
    //T disableinvert;  disabledraw;
    } // 追加

良く見ると、適当に修正したので、少し手抜きがあります。
頻繁に使用するには重過ぎる手続きです。好みも在りますし ...

    if( ! selecting ){
        gofiletop;  #x_start = x;   #y_start = y;
    } else {
        message "範囲選択の処理は出来ません !"; // 追加
        endmacro; // 追加
    //  #x_start = seltopx; #y_start = seltopy; // 修正
    }

正規表現の置換で ^\n をヌルで置きかえると、改行だけの行は削除できます。
マクロでは、
    replaceallfast "^\\n", "", regular, inselect;
    gofiletop;
endmacro; // となります。

うまく行ったのでしょうか ???

[ ]
RE:04086 一括削除につきましてNo.04103
ひろ さん 99/10/01 14:09
 
 梅吉君さん今日は、ひろです。
> xxx@mail.goo.ne.jp
> xxxxx@fortune.vip.co.jp
 たった 2 件ならば、秀丸の置換機能で検索文字列を
「aki@mail\.goo\.ne\.jp\n」および「umeki@fortune\.vip\.co\.jp\n」とし
て、置換文字列を「」(何も書か無い)として「正規表現」を ON にすればよ
いです。macro でかくなら、以下の文を拡張子が mac である適当な file
name で秀丸を install した folder (「その他」→「動作環境」→「パス」
→「環境」の「マクロ用フォルダ」が指定してある場合は、指定した folder)
へ保存し、「マクロ」→「マクロ実行」で先程保存した file を指定します。
macro について詳しくは、help および、
http://win.blue.co.jp/~jr-kun/hidemaru_qa/index.html
を参考にして下さい。
// -------------- begin sample macro ----------------------------
replaceallfast "(aki@mail\.goo\\.ne\.jp|"
    +"umeki@fortune\\.vip\\.co\\.jp)\\n","",regular;
// -------------- end sample macro -------------------------------

[ ]
RE:04103 一括削除につきましてNo.04109
梅吉君 さん 99/10/01 15:25
 
> 梅吉君さん今日は、ひろです。
>> xxx@mail.goo.ne.jp
>> xxxxx@fortune.vip.co.jp
> たった 2 件ならば、秀丸の置換機能で検索文字列を
>「aki@mail\.goo\.ne\.jp\n」および「umeki@fortune\.vip\.co\.jp\n」とし
>て、置換文字列を「」(何も書か無い)として「正規表現」を ON にすればよ
>いです。macro でかくなら、以下の文を拡張子が mac である適当な file
>name で秀丸を install した folder (「その他」→「動作環境」→「パス」
>→「環境」の「マクロ用フォルダ」が指定してある場合は、指定した folder)
>へ保存し、「マクロ」→「マクロ実行」で先程保存した file を指定します。
>macro について詳しくは、help および、
>http://win.blue.co.jp/~jr-kun/hidemaru_qa/index.html
>を参考にして下さい。
>// -------------- begin sample macro ----------------------------
>replaceallfast "(aki@mail\.goo\\.ne\.jp|"
>    +"umeki@fortune\\.vip\\.co\\.jp)\\n","",regular;
>// -------------- end sample macro -------------------------------


お返事ありがとうございます。
実際は2件ではなく100件を越えるのです
実験的に少しのアドレスでテストしてみました。


梅吉君

[ ]
RE:04099 一括削除につきましてNo.04116
梅吉君 さん 99/10/02 02:39
 
>    if( $wk1 != ""){    //  改行だけは無視する // 追加
>        title $wk1 + " - を処理中です";
>        call pp_s1;
>    //T disableinvert;  disabledraw;
>    } // 追加
>
>良く見ると、適当に修正したので、少し手抜きがあります。
>頻繁に使用するには重過ぎる手続きです。好みも在りますし ...
>
>    if( ! selecting ){
>        gofiletop;  #x_start = x;   #y_start = y;
>    } else {
>        message "範囲選択の処理は出来ません !"; // 追加
>        endmacro; // 追加
>    //  #x_start = seltopx; #y_start = seltopy; // 修正
>    }
>
>正規表現の置換で ^\n をヌルで置きかえると、改行だけの行は削除できます。
>マクロでは、
>    replaceallfast "^\\n", "", regular, inselect;
>    gofiletop;
>endmacro; // となります。
>
>うまく行ったのでしょうか ???

----------------------------------------------------------------
正規表現の置換で ^\n をヌルで置きかえると、改行だけの行は削除できます。
上記に関しましては、やってみましたら出来ました。
改行のみを削除する方法があるとは知りませんでした、、、、、

「頻繁に使用するには重過ぎる手続きです。」
という事は頻繁に使うには良くないと言う事でしょうか?

とりあえず今の段階では動いております、

梅吉君



[ ]
RE:04116 一括削除につきましてNo.04120
番頭++ さん 99/10/02 12:10
 
>「頻繁に使用するには重過ぎる手続きです。」
>という事は頻繁に使うには良くないと言う事でしょうか?

これだけコーディングすると、秀丸のマクロはけっして早い処理とは言えません。
一日に何度も使用する手続きであれば、ほかの言語で書いたほうがストレスがたまら
ないでしょう。そんな意味です。この件はこれでおしまい ...

[ ]