マクロについてNo.07243
らくだ さん 01/01/24 21:03
 
一つのファイルの中から
ある特定の文字列を含む行全てを
削除するマクロを
作成したいと考えていますが
うまくいきません。
どうやったらうまくいくのでしょうか?


[ ]
RE:07243 マクロについてNo.07244
番頭++ さん 01/01/24 21:23
 
>一つのファイルの中から
>ある特定の文字列を含む行全てを
>削除するマクロを
>作成したいと考えていますが
>うまくいきません。

まくろの会議室で、どこまで完成したのか書いてみるのも案です ...

[ ]
RE:07243 マクロについてNo.07250
Micky さん 01/01/25 08:54
 
micky です。

らくだ さん wrote:
> 一つのファイルの中から
> ある特定の文字列を含む行全てを
> 削除するマクロを
> 作成したいと考えていますが
> うまくいきません。
> どうやったらうまくいくのでしょうか?

サンプルと言う事で、
ここから−−−−−−−
// SelDel.mac
//選択範囲を含む行を削除する。
//1999-07-22(木) サーチデータキープ
$s = searchbuffer;// サーチデータキープ 1999-07-22(木)
#f = searchoption;
disabledraw;
getsearch;
gofiletop;
while (1) {
finddown;
if( result ) {
deleteline;
up;
} else {
beep;
break;
}
}
enabledraw;
setsearch $s, #f;
endmacro

ここまで−−−−−−−

[ ]
RE:07243 マクロについてNo.07252
きいろいまふらあ さん 01/01/25 09:33
 
らくださんこんにちは。

> 一つのファイルの中から
> ある特定の文字列を含む行全てを
> 削除するマクロを

正規表現を使った置換が手っ取り早いです。

まず、マクロでなく手作業でやる場合。
特定の文字列を「hoge」とすると

「検索」→「置換」のダイアログで
検索文字列→.*hoge.*\n
置換文字列→(空欄)
□正規表現→チェックする
としておいて「全て置換」とすると
「hoge」を含む全ての行が(改行も含めて)削除されます。

「.*」てのは「改行を除く0文字以上の任意の文字列」です。
「\n」てのは「改行」です。
「.*hoge.*\n」だと「hogeの前に0文字以上、後ろに0文字以上あって
その後ろに改行があるような行」ということになりますが、
正規表現を使った検索・置換は、条件にあてはまる文字列のうち
できるだけ長い範囲を対象にするようにできている(「最長一致の原則」と
いいます)ので、結果的には「hoge」を含む行全体がヒットします。

同じことをマクロで書くと

replaceall ".*hoge.*\\n","",regular;

となります(replaceallfastでも一緒)。
「\n」→「\\n」となってるところに注意して下さい。

老婆心ながら、まず手作業(「検索」→「置換」)で思い通りに動くことを
確認して、次にマクロをお書きになることをおすすめします。

[ ]
RE:07243 マクロについてNo.07266
きいろいまふらあ さん 01/01/26 02:36
 
らくださんこんにちは。

>一つのファイルの中から
>ある特定の文字列を含む行全てを
>削除するマクロを
>作成したいと考えていますが

手作業ではできましたか?
置換で正規表現を使うと楽ですよ。

「hoge」を含む行を全部削除を手作業でやる場合、
置換のダイアログを出し、
検索文字列 .*hoge.*\n
置換文字列 (空欄)
□正規表現 のチェックを入れて「全置換」

これをマクロで書くなら

replaceall ".*hoge.*\\n", "", regular;

ですね。replaceallfastでも同じです。

[ ]
RE:07266 マクロについてNo.07267
きいろいまふらあ さん 01/01/26 09:35
 
事故レス。

> らくださんこんにちは。
(以下略)

別のとこで書いて送信しそこねたメールを再送してしまいました。
失礼しました。

[ ]