置換についてNo.01994
yamasan さん 01/04/20 08:29
 
こんにちは、yamadaと申します。お願いします。
以前に置換するマクロを教えていただきまして、
それを利用しています。

それで、やっているのは、メーラーから、メールを複数選択し、
エクスポートして、一つのテキストファイル(Shift-JIS)があるとして、
それのヘッダ情報を大幅に削除しています。
まず、フリーのMail Header Diet Ver 1.61というソフトで
希望のヘッダ情報を削除してますが、
上手く削除できないものを実行するために、

--------------
    replaceallfast "From .+\\n$", "", regular;
    replaceallfast "To:<E-mail>.+\\n$", "", regular;
    replaceallfast "X-Priority:.+\\n$", "", regular;
    replaceallfast "Status:.+\\n$", "", regular;
    endmacro;
--------------
と言うような事で、実行しました。
このように、4つも同じ様な文を続けて支障ありませんか?
それとも、違った書き方があるとか。間違えているとかですね。
(自分では、上手く動作していると思います。)

それと、
From .+\\n$
という行が、ファイルの先頭にあった場合は、置換されないというか、
ヒットしません。(一行空白行を入れて実行してます。)
対処する方法をお教えください。

[ ]
RE:01994 置換についてNo.01995
番頭++ さん 01/04/20 08:38
 
>このように、4つも同じ様な文を続けて支障ありませんか?

ありません。

>ファイルの先頭にあった場合は、置換されないというか、

gofiletop;
insert "\n";
...
gofiletop;
delete;
endmacro;

では、いかがですか ...

[ ]
RE:01995 置換についてNo.01996
yamasan さん 01/04/20 08:43
 
>gofiletop;
>insert "\n";
>...
>gofiletop;
>delete;
>endmacro;
>
>では、いかがですか ...

了解しました。頭の一ひねりが不足していました。
マクロで、改行をし、その改行を取り除くわけですね。
申し訳ありませんでした。解決しました。

[ ]
RE:01996 置換についてNo.01997
yamasan さん 01/04/20 10:15
 
yamadaです。追加の質問です。お願いします。

先ほど置換のマクロと同じ事の関連ですが、
この置換を例えば、かなり多数の*.txtファイルについて、
同様に行いたい場合は、どういうことが考えられますでしょうか。
一つ一つのファイルについて実行しないで、一括で可能に出来ますのでしょうか。

同一のフォルダ内に100ほどのtxtファイルがあるとして、
どうにかして、省力化できないですか。
同じ作業を複数多数のファイルについて行いたいと言う事です。

[ ]
RE:01997 置換についてNo.01998
ひろ さん 01/04/20 12:20
 
 yamasan さん今日は、ひろです。
 まず最初の投稿について
>     replaceallfast "From .+\\n$", "", regular;
>     replaceallfast "To:<E-mail>.+\\n$", "", regular;
>     replaceallfast "X-Priority:.+\\n$", "", regular;
>     replaceallfast "Status:.+\\n$", "", regular;
どうせ正規表現を使うなら、
replaceallfast "^(From|To:<E-mail>|X-Priority:|Status:).+\\n", "", regular;
で良いのではないでしょうか?

> >From .+\\n$
> という行が、ファイルの先頭にあった場合は、置換されないというか、
> ヒットしません。(一行空白行を入れて実行してます。)
 replacedown はともかく replaceall(fast) は出来るはずです。上記の書
き込みのように、余分な「$」を削除するとどうなりますか?

 さて本題(?)
> 一つ一つのファイルについて実行しないで、一括で可能に出来ますのでしょうか。
 可能ではありますが、
> 同一のフォルダ内に100ほどのtxtファイルがあるとして、
100 個となると上手くいかない場合がでてくると思います。

 やり方としては、
(1)予め全てのファイルを開いておく→おそらくメモリー不足で開けない
(2)grep を使い条件にある文字列が存在するファイルをリストアップし、
tagjump, hidemaruhandle, setactivehidemaru, closehidemaru 若しくは
loadfile   を利用して、ファイルを一つ一つ開き件のマクロを利用する。
→おそらく setativehidemaru, tagjump でウィンドの切り替えに失敗する
場合が有る。
という方法が考えられます。

[ ]
RE:01997 置換についてNo.01999
番頭++ さん 01/04/20 12:22
 
>同じ作業を複数多数のファイルについて行いたいと言う事です。

http://homepage2.nifty.com/bantou_pp/KBANTOU/KZHMJ304Beta/KZ_HMacro1/KZ_HMEx
All1.mac
<== これを、

//*1 【マクロ名】 KZ_HMExAll1.mac - Ver. 03.04 - 1999/11/11
//*1  (C) Copyright 番頭++ (Bantou++). 1996 - 1999. All Rights Reserved.
//*1 【作者】 番頭++
//*1 ・このマクロは、シェアウェアです。
//*1 【機能】
//*1 ・作成されたリストのファイルすべてに、マクロを実行
...

を参考 (???) にしてください。
yamasan だけへ、これだけでしたら買う必要は無いです。

[ ]
RE:01998 置換についてNo.02000
yamasan さん 01/04/20 14:02
 
ひろさん、こんにちは。yamadaです。

 | replaceallfast "^(From|To:<E-mail>|X-Priority:|Status:).+\\n", "", regular;
 | で良いのではないでしょうか?

なるほど。カレットで行頭、そして論理和を考慮し、$ を削除すると、
出来ました!削除したら、空白行を入れる必要は、無いです。
処理の終了まで、時間も短縮されたようです。
有難うございました。

 |  やり方としては、
 | (1)予め全てのファイルを開いておく→おそらくメモリー不足で開けない
 | (2)grep を使い条件にある文字列が存在するファイルをリストアップし、
 | tagjump, hidemaruhandle, setactivehidemaru, closehidemaru 若しくは
 | loadfile   を利用して、ファイルを一つ一つ開き件のマクロを利用する。
 | →おそらく setativehidemaru, tagjump でウィンドの切り替えに失敗する
 | 場合が有る。
 | という方法が考えられます。

こちらについては、鋭意努力中です。また、ご報告します。

[ ]
RE:01999 置換についてNo.02001
yamasan さん 01/04/20 14:03
 
番頭++さん、有難うございました。yamadaです。

 | http://homepage2.nifty.com/bantou_pp/KBANTOU/KZHMJ304Beta/KZ_HMacro1/KZ_HMEx
 | All1.mac

このマクロをダウンロードしました。
現在、説明を読みながら、鋭意努力中であります。
また、ご報告します。

 | yamasan だけへ、これだけでしたら買う必要は無いです。

どうも、お世話になるばかりで申し訳ありません。
とりあえず、DLが完了したご報告だけ、です。失礼します。

[ ]
RE:02001 置換についてNo.02003
山紫水明 さん 01/04/20 20:55
 
 yamasanさん,こんばんは。

》この置換を例えば、かなり多数の*.txtファイルについて、
》同様に行いたい場合は、どういうことが考えられますでしょうか。
》一つ一つのファイルについて実行しないで、一括で可能に出来ますのでしょうか。

 その後うまくいきましたか?
 次のようなマクロではいかがでしょう。試してください。
 ただし,いうまでもなく,フォルダのバックアップをとって実行してください。

//------------------------------------------------------------------//
#handle_1 = hidemaruhandle( 0 );
grep ".+","*.*", ".", regular, icon, filelist;
    //文字が1字以上あるファイルのリストを作る
    //もっと限定できる文字列を書いてもよい
#n = result;
replaceallfast "\\([0-9]+\\)$", "", regular;
    //行番号を削除
gofiletop;
#i = 1;
while( #i <= #n ) {
    $file[#i] = gettext( 0, y, linelen, y );
        //2行以上にわたる長いファイル名があれば別の書き方が必要ですが。
    down;
    #i = #i + 1;
}
#handle_g = hidemaruhandle( 0 );
closehidemaruforced #handle_1;
openfile $file[1];
call Replace;
save;
#i = 2;
while( #i <= #n ) {
    loadfile $file[#i];
    call Replace;
    save;
    #i = #i + 1;
}
closehidemaruforced #handle_g;
endmacro;

Replace:    //処理
replaceallfast "^(From|To:<E-mail>|X-Priority:|Status:).+\\n", "", regular;
return;
//------------------------------------------------------------------//

     では, (^^)/~
                                        山紫水明

[ ]
RE:02003 置換についてNo.02005
yamasan さん 01/04/21 09:23
 
山紫水明 さん、おはようございます。
yamadaです。

このお教えいただいたマクロで、上手くいきました。
できるんですね。マクロでファイルリストを作成したりが。
200ほどのファイルについて、一つのファイルを選んで、開き、
マクロを実行しました。(もっとも、マクロの内容は、
よく分からないと言うのが、私の実状ですが、深く考えないようにします。今は。)

^(From |To:<E-mail>|X-Priority:|Status:).+\\n
を検索して、削除すると言う事を、実行してくれました。
勝手にファイルリストを作ってくれるのは、私にとっては、大助かりでした。
*.emlでも、同じ事ですね。拡張子を変換しなくてもいいので、
これまた、大助かりです。

ウィンドウが、作業をしているファイルファイルで切り替わるので、
凄いと言うか、凄まじいと言うか、兎に角、楽勝で できるようになりました。

山紫水明 さん、お世話になりました。そして、有難うございました。
最近、やっと秀丸を使っているなぁと少し思えてきました。

実は、番頭++さんに教えていただいたのでは、
私の能力不足で、中途で諦めていたんです。
grep検索でファイルリストを作って、そこから先で上手くマクロを使えなくて。
番頭++さんのご好意に報えずに、申し訳ないです。
この場を借りて、お詫びします。ごめんなさい。

[ ]
RE:02005 置換についてNo.02008
山紫水明 さん 01/04/21 13:47
 
 yamasanさん,こんにちは。

》よく分からないと言うのが、私の実状ですが、深く考えないようにします。今は。

 そのうち深くお考えにならなくても,わかるようになると思いますよ。

》ウィンドウが、作業をしているファイルファイルで切り替わるので、
》凄いと言うか、凄まじいと言うか、

 次のようにもできると思います。こちらの方が静かに密かにというところでしょ
うか。好みに応じてということで。(^^;

//------------------------------------------------------------------//
//目的のファイルを一つ開いて実行する
#starttime = tickcount;
#handle_1 = hidemaruhandle( 0 );
grep ".+", "*.*", ".", regular, icon, filelist;
    //文字が1字以上あるファイルのリストを作る
    //もっと限定できる文字列を書いてもよい
#n = result;
replaceallfast "\\([0-9]+\\)$", "", regular;
    //行番号を削除
gofiletop;
#i = 1;
while( #i <= #n ) {
    $file[#i] = gettext( 0, y, linelen, y );
        //2行以上にわたる長いファイル名があれば別の書き方が必要ですが。
    down;
    #i = #i + 1;
}
#handle_g = hidemaruhandle( 0 );
changename "grep.tmp";
closehidemaruforced #handle_1;
#i = 1;
while( #i <= #n ) {
    openfile "/h " + $file[#i];
    #handle[#i] = hidemaruhandle(0);
    if(#i > 1) closehidemaruforced #handle[#i - 1];
    call Replace;
    save;
    #i = #i + 1;
}
closehidemaruforced #handle_g;
#time = tickcount - #starttime;
message "終わりました\n" + str(#time/1000) + " 秒かかりました";
endmacro;

Replace:    //処理
replaceallfast "^(From|To:<E-mail>|X-Priority:|Status:).+\\n", "", regular;
return;
//------------------------------------------------------------------//

     では, (^^)/~
                                        山紫水明

[ ]
RE:02008 置換についてNo.02010
yamasan さん 01/04/21 15:35
 
山紫水明 様。お世話になりました。有難うございます。

 |  そのうち深くお考えにならなくても,わかるようになると思いますよ。

そこまでは、無理じゃないかと思います。

 |  次のようにもできると思います。こちらの方が静かに密かにというところでしょ
 | うか。好みに応じてということで。(^^;

こちらは、見た目が穏やかですね。(^_^)

 | message "終わりました\n" + str(#time/1000) + " 秒かかりました";

終わったとコメントが出るのも、なかなか、面白いです。(失礼)
タイムまで出していただけるとは、恐れ入りました。
重ねて、お礼を申し上げます。有難うございました。

[ ]