Macro/投稿/208

http://sakura.qp.land.to/?Macro%2F%C5%EA%B9%C6%2F208


Top > Macro > 投稿 > 208

不一致検索(一致しない行の検索)

  • ページ: Macro/投稿
  • 作者: jj?
  • カテゴリー: js
  • 投稿日: 2010-01-08 (金) 03:26:10

メッセージ

指定した文字列を含まない行を検索します。(行単位で検索します。)

何のことはありません、正規表現 "^(?!.*不一致文字列)[^\r\n]*(\r\n|\r|\n)?"
をすぐ忘れてしまうのでマクロ化しただけです。
当初はemacsの delete-non-matching-lines (不一致行を削除)のようなのが
欲しかったのですが、まず検索して結果を確認し、それから置換ダイアログで
ドロップダウンリストから選べば済むので、検索だけに留めました。


fileSearchNoMatchLine.js
  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
/* (Tab=4)
 [概要]
	不一致検索
	指定した文字列を含まない行を検索します。(行単位で検索します。)
	範囲選択されていれば選択範囲(の先頭行のみ)を、
	範囲選択されていなければカーソル上の単語を入力文字列として使用します。
 [変更履歴]
	2010/01/06	新規
*/
 
// メッセージボックスのタイトル (本マクロ名)
var CAPTION = Editor.ExpandParameter("$M").replace( /^.*\\/, "" );
if( CAPTION == "" ) CAPTION = "不一致検索";        // [名前を指定してマクロ実行...]
 
// 検索(検索ダイアログ)のオプション
//	bSEARCH_AutoClose は本マクロの動作とは無関係ですが、
//	チェックOFFで使用されている方は false にしてください。
var bSEARCH_MatchCase = false;        // 英大文字と小文字を区別する
var bSEARCH_AutoClose = true;        // 検索ダイアログを自動的に閉じる
 
// 正規表現を使用するか (true=入力した文字列は、正規表現として扱う)
var bUSE_REGEXP = false;
 
 
Main();
 
function Main()
{
    var oSC = new ActiveXObject("ScriptControl");    // InputBox
    var s, sOrg, c;
    var i;
    var nSearchOpt;
    
    // InputBox
    oSC.Language = "VBScript";
    oSC.AddCode( 'Function InBox(prompt,title,default):InBox=InputBox(prompt,title, default):End Function' );
    s = oSC.Run( "InBox",
        "指定した文字列を含まない行を検索します。\n" +
        "何も入力しない場合、改行のみの行以外が検索されます。\n\n\n" +
        "不一致検索する文字列" + ((bUSE_REGEXP) ? "(正規表現)" : "") + ":"
        , CAPTION, Editor.ExpandParameter("$C") );
    if( typeof s == "undefined" ) return;    // キャンセルされた
    
    // 不一致行検索の正規表現
    if( s != "" ){
        if( !bUSE_REGEXP ){
            // メタ文字のエスケープ
            sOrg = s;
            s = "";
            for(i=0;  i < sOrg.length;  i++){
                c = sOrg.charAt( i );
                if( "\\|()[]{}*+?.".indexOf( c ) != -1 ) s += "\\";
				s += c;
			}
		}
		// 例:"abc" → "^(?!.*abc)[^\r\n]*(\r\n|\r|\n)?"
		s = "^(?!.*" + s + ")[^\\r\\n]*(\\r\\n|\\r|\\n)?";
	}else{
		// 改行のみ(空白も無し)の行 を不一致検索
		s = "^[^\\r\\n]+(\\r\\n|\\r|\\n)?";
	}
	nSearchOpt = 1<<2;						// bit2:正規表現
	nSearchOpt |= (!!bSEARCH_MatchCase)<<1;	// bit1:英大文字と小文字を区別する
	nSearchOpt |= (!!bSEARCH_AutoClose)<<4;	// bit4:検索ダイアログを自動的に閉じる
	Editor.SearchNext( s, nSearchOpt );
	Editor.ReDraw();	// ステータスバーの行・桁の更新
}


URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

添付ファイル: fileSearchNoMatchLine.js 628件 [詳細]

リロード   新規 編集 凍結 差分 添付 複製 名前変更   ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: 2010-01-08 (金) 03:28:00 (5184d)