超まとめ
Get-Contentsで読み込んだ文字列配列(String[])から、特定の行で囲まれている範囲を取り出す関数です。
<#
.SYNOPSIS
Get-Contentsで読み込んだStrng[]などから、特定の行で囲まれた範囲を抽出します。
.EXAMPLE
下記の様な文字列配列に対して
$exampleStr = @(
"aaa",
"bbb",
"ccc",
"ddd",
"eee"
)
GetRangeLimitedLines -contents $exampleStr -matchLinestringForStart "aaa" -matchLinestringForEnd "ddd"
は @("bbb","ccc")を返します。
GetRangeLimitedLines -contents $exampleStr -matchLinestringForStart "bbb" -matchLinestringForEnd "ddd"
は @("bbb","ccc","ddd")を返します。
#>
function GetRangeLimitedLines()
{
param
(
[string[]]
#検索対象の文字列配列
$contents,
[string]
#抽出範囲の開始行文字列
$matchLinestringForStart,
[string]
#抽出範囲の終了後文字列
$matchLinestringForEnd,
[switch]
#$trueの場合、matchLinestringForXXを含むString[]を返す
$containMatchstring = $false,
[int]
#開始行文字列を検索開始するインデックス
$startIndex = 0
)
$startIndex = [Array]::IndexOf($contents, $matchLinestringForStart, $startIndex)
$endIndex= [Array]::IndexOf($contents, $matchLinestringForEnd, $startIndex+1)
if( ($startIndex -eq -1) -or ($endIndex -eq -1) )
{
return $null
}
else
{
if($containMatchstring)
{
return $contents[$startIndex .. $endIndex]
}
else
{
return $contents[ ($startIndex+1) .. ($endIndex-1) ]
}
}
}
自由書式なログファイルを機械処理するために用意しました。