【簡単】コピペOK!Grep検索マクロ ~ サクラエディタ ~

2023年10月23日月曜日

Grep VBS サクラエディタ マクロ



はじめに

当記事は、メモ書きとして残す目的で書いた記事です。

今回ご紹介するマクロは、私が仕事をする上で、 『3000行以上ある作業ログファイル200個から、特定の20行だけ抽出したい!』 という目的で初めて作ったものです。

◆この記事でわかること

サクラエディタで使える『Grepマクロ』の書き方の基本

■Grepマクロ

◆サクラエディタのGrepマクロ構文

サクラエディタのヘルプ内マクロリファレンスより抜粋した、Grep関数の構文です。

void S_Grep ( S1, S2, S3, i1 , i2 )

◇引数の説明

引数 内容
S1 文字列 検索文字列
S2 文字列 検索対象ファイル
S3 文字列 検索対象フォルダ
i1 整数 数値 Grepダイアログの状態
i2 整数 数値 文字コードセット

◆1. Grepマクロ例: VBSのコードの書き方

' C:¥tempフォルダのテキストファイルから、『りんご』『なし』『みかん』を検索。
'   ※拡張子は.vbsです。

Grep "りんご", "*.txt", "c:\\temp", 0, 99
Grep "なし", "*.txt", "c:\\temp", 0, 99
Grep "みかん", "*.txt", "c:\\temp", 0, 99

結果は『C:¥tempフォルダ内の全テキストファイル』から、

『りんご』と書かれた行がすべて表示された後、

『なし』『みかん』続いて表示されます。

◆2. Grepマクロ例: 検索値を配列に格納して使用する場合

検索値を配列に入れると、編集が楽になります。

コピペして使用する場合は、『keys』と『sPath』を変更すればOKです。

'名前:Grepマクロサンプル2.vbs
'内容:C:\\tempフォルダ内のファイルを検索する。

'-------------
'  設定
keys = Array( "りんご", _ 
              "なし", _ 
              "みかん" )
sFile = "*.*"      'ファイル名
sPath = "C:\\temp"     'ファイルパス
i1 = 1               'Grepダイアログの状態: サブフォルダも検索
i2 = 99              '文字コードセット: 自動選択

'-------------
'  Grep検索
'  配列の要素数だけ、Grep検索を繰り返す。
For i = 0 To UBound(keys)   'UBound()は、配列の最大要素数
	Grep Keys(i), sFile, sPath, i1, i2
Next

このサンプルでは、『c:\temp』内のファイルすべて検索します。

※UBound()は配列の要素数を取得できます。

◆3. Grepマクロ例: 編集中のファイルにGrep検索する場合

現在編集中のみファイルをGrep検索したい場合は、以下のようにすればOKです。

コピペして使用する場合は、『keys』のみ編集すればOKです。

'名前:Grepマクロサンプル3.vbs
'内容:編集中のファイルをGrep検索する。
'-------------
'  設定
keys = Array( "りんご", _ 
              "なし", _ 
              "みかん" )
'------------- 
' 編集中のファイルを対象に選択文字列でGrep実行
sFile = ExpandParameter("$f")
sPath = ExpandParameter("$F")
sDir = Left(sPath, Len(sPath) - Len(sFile) - 1)
i1 = 18  'サブディレクトリなし、大文字小文字区別する。
i2 = 99  '文字コードセット自動
'-------------
'  Grep検索
'  配列の要素数だけ、Grep検索を繰り返す。
For i = 0 To UBound(keys)
	Grep Keys(i), sFile, sDir, i1, i2
Next

このサンプルは、現在編集中のファイルのみGrep検索します。

◆4. Grepマクロ例: 編集中ファイルのフォルダをGrep検索

現在編集中のみファイルをGrep検索したい場合は、以下のようにすればOKです。

コピペして使用する場合は、『keys』のみ編集すればOKです。

''名前:Grepマクロサンプル4.vbs
'内容:編集中ファイルのフォルダをGrep検索する

'-------------
'  設定
keys = Array( "りんご", _ 
              "なし", _ 
              "みかん" )
              
'------------- 
' 編集中のファイルを対象に選択文字列でGrep実行
sFile = ExpandParameter("$f")
sPath = ExpandParameter("$F")
sDir = Left(sPath, Len(sPath) - Len(sFile) - 1)
i1 = 2 + 16 + 32  '大文字小文字区別、文字コード自動、該当行表示。

'-------------
'  Grep検索
'  配列の要素数だけ、Grep検索を繰り返す。
For Each key In Keys
	Grep key, "*.*", sDir, i1
Next

このサンプルは、現在編集しているファイルのフォルダをGrep検索します。

サブフォルダも検索に含めたい場合、i1の値に1を足せばOKです。

ついでに繰り返し処理を、For Each に変更しました。

さいごに

私は200個以上のファイル内容を確認する必要があったため、 作業内容をマクロにすることで、とても負担が減りました。

もし同じように『大量のテキストファイルの内容確認を繰り返す』 という方のお役に立つことができれば助けになれば幸いです。

QooQ