[powershell]文字列の配列(String[])から特定の行で囲まれた範囲を抽出する関数

超まとめ

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) ]
        }

    }
}

自由書式なログファイルを機械処理するために用意しました。

コメントを残す