サクラエディタの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 件のコメント:
コメントを投稿