- 作成者投稿
- 2007年11月1日 2:44 am #5064fuku29メンバー
初心者的な質問ですいません。
「abc」という文字列が入っている行を全部消したいのですが、どのようにすればいいのでしょうか。
「abc」を検索して、検索された文字の行を消す、というマクロはひとつつくってみましたが、そのマクロをF4で何度も実行したり一時オプションで回数を指定したりするには、ファイルが巨大すぎるのです・・・
お察しの方もいるかもしれませんが、サイトのログファイルを整理したいのです。参考書にも載っているので、みなさんよくやられていると思うのですが・・・ :-?
2007年11月1日 5:58 pm #5067takuyaParticipantちょうど同じような処理をしていたところなので、私の考えた選択肢をマクロにしてみました。
幾つか方法はあると思います。
0)マクロ無し
マクロ使わないなら、EmEditorでTab区切りCSV化しEXCELに貼付けてソートして削除が楽かと。1) 正規表現を工夫するとか
正規表現なら置換ダイアログだけでOK。document.selection.Replace( “.*abc.*”, “”, eeFindReplaceRegExp+eeReplaceAll );//*abc*を検索して空白に
document.selection.Replace( “^n”, “”, eeFindReplaceRegExp+eeReplaceAll );//空白行を削除2)JavaScriptっぽくマクロ処理するなら
Redraw = false;
document.selection.SelectAll();
lines = document.selection.Text.split(/n/g);
for( i in lines){
if( lines.indexOf(“abc”) > -1 ){
lines.splice(i,2);
}
}
document.selection.Text = lines.join(“”);
document.selection.Collapse();
Redraw = true;
3)7.0版のみで動作させるマクロ、
この処理が早いと思う1行ずつ読み込んでいるから。
Redraw = false;
for(i=1;i -1){
document.selection.SetActivePoint( eePosLogical, 1,i,false );
document.selection.SelectLine();
document.selection.Delete();
i–;
}
}
Redraw = true;追記1:
LineDown()は最終行を検出できないのでループで使うべきではないと判明。
追記2:
ダイアログを使った正規表現置換は画面の再描画があるので遅かった。追記3:個人的にはDocumentオブジェクトでgrep処理 + rubyっぽいiterator処理が出来れば理想的です。
//EmEditorで開いてるファイルにGrep処理がしたい
document.grep( “abc” ).each(function(index,value){#行削除処理#});コレは実装するのは大変ですが。個人的に作りかけだったりします。そのうち公開します。
2007年11月5日 1:40 am #5104fuku29メンバーtakuyaさま
どうもありがとうございます~~!!
document.selection.Find(“.jpg”,eeFindNext | eeFindReplaceRegExp);
document.selection.SelectLine();
document.selection.Delete(1);なんていうマクロを、1か月分のログファイルに終わるまで処理させてみたら、10万回、数時間繰り返しても終わりませんでした・・・(- -u)
サイトのログファイルってこんなに重いのか・・・。こんなんでこれから、このファイルを活用するべきなのかどうか?と悩んでいるところでした。
ですが、とりあえずExcelはつまらないので(気づかなかったくせに・・・)1)の方法を試してみたら、一瞬にして終わったようです~~(嬉泣) 3)はまだこちら6.0だったので試せないのですが、もうこれで満足・・・ただ、追記3にあったように、Grep処理って複数ファイルをまとめて処理するってことでしょうか?これができたら本当に最高ですね!
自分ではこの機能自体よくわかりませんが、公開していただいたらぜひ利用したいです。どうぞよろしくお願いいたします。
:-D - 作成者投稿
- このトピックに返信するにはログインしてください。