サクラエディタのGrep結果を取得するために作成しました。
実行するにはVBScript用文字列関連の関数(1)が必要です。
'Grep結果を全て取得します。 Function getGrepResults() Dim strFolderPath: strFolderPath = getFolderPath() Dim lngRu: lngRu = Editor.GetLineCount(0) Dim lngR Dim lngI: lngI = -1 Dim objGrepResults: Redim objGrepResults(lngRu) Dim strLine For lngR = lngRu To 1 Step -1 strLine = getLine(lngR) If startsWith(strLine, strFolderPath) Then lngI = lngI + 1 Set objGrepResults(lngI) = getGrepResult(strLine) End If Next ReDim Preserve objGrepResults(lngI) getGrepResults = objGrepResults Erase objGrepResults End Function 'Grep結果を1行分取得します。 Function getGrepResult(ByRef strLine) Dim objGrepResult: Set objGrepResult = New GrepResult With objGrepResult .strText = getText(strLine) .strFilePath = getFilePath(strLine) .lngRow = getRow(strLine) .lngCol = getCol(strLine) End With Set getGrepResult = objGrepResult Set objGrepResult = Nothing End Function 'Grep対象のフォルダを取得します。 Function getFolderPath() Const PREFIX_FOLDERPATH = "フォルダ " getFolderPath = "" Dim lngRu: lngRu = Editor.GetLineCount(0) Dim lngR Dim strLine For lngR = 1 To lngRu strLine = getLine(lngR) If startsWith(strLine, PREFIX_FOLDERPATH) Then getFolderPath = Mid(strLine, Len(PREFIX_FOLDERPATH) + 1) Exit Function End If Next End Function 'Grep結果からファイルのパスを取得します。 Function getFilePath(ByRef strLine) getFilePath = "" Dim lngPlPos: lngPlPos = getPlPos(strLine) getFilePath = Left(strLine, lngPlPos - 1) End Function 'Grep結果から行を取得します。 Function getRow(ByRef strLine) getRow = 0 Dim lngPlPos: lngPlPos = getPlPos(strLine) Dim lngCmmPos: lngCmmPos = getCmmPos(strLine) Dim strRow: strRow = Mid(strLine, lngPlPos + 1, lngCmmPos - lngPlPos - 1) getRow = CLng(Trim(strRow)) End Function 'Grep結果から桁を取得します。 Function getCol(ByRef strLine) getCol = 0 Dim lngCmmPos: lngCmmPos = getCmmPos(strLine) Dim lngPrPos: lngPrPos = getPrPos(strLine) Dim strCol: strCol = Mid(strLine, lngCmmPos + 1, lngPrPos - lngCmmPos - 1) getCol = CLng(Trim(strCol)) End Function 'Grep結果からテキストを取得します。 Function getText(ByRef strLine) getText = "" Dim lngCrnPos: lngCrnPos = getCrnPos(strLine) getText = Mid(strLine, lngCrnPos + 2) End Function 'Grep結果から行,桁の前括弧の位置を取得します。 Function getPlPos(ByRef strLine) getPlPos = -1 Dim lngCrnPos: lngCrnPos = getCrnPos(strLine) Dim lngP Dim lngPlPos For lngP = lngCrnPos To 1 Step -1 If Mid(strLine, lngP, 1) = "(" Then lngPlPos = lngP Exit For End If Next getPlPos = lngPlPos End Function 'Grep結果から行,桁を区切るカンマの位置を取得します。 Function getCmmPos(ByRef strLine) getCmmPos = -1 Dim lngPlPos: lngPlPos = getPlPos(strLine) getCmmPos = InStr(lngPlPos, strLine, ",") End Function 'Grep結果から行,桁の後ろ括弧の位置を取得します。 Function getPrPos(ByRef strLine) getPrPos = -1 Dim lngCmmPos: lngCmmPos = getCmmPos(strLine) getPrPos = InStr(lngCmmPos, strLine, ")") End Function 'Grep結果からパス,行,桁情報の終了の位置を取得します。 Function getCrnPos(ByRef strLine) getCrnPos = InStr(1, strLine, "]:") + 1 End Function '改行を含まない1行分の文字列を取得します。 Function getLine(ByRef lngR) getLine = getString(Editor.GetLineStr(lngR)) End Function 'これ以降はクラス 'Grep結果1つ分の情報を保持するクラスです。 Class GrepResult Public strText Public strFilePath Public lngRow Public lngCol End Class
0 件のコメント:
コメントを投稿