0

メモ帳ファイルに次の入力行があります。

例 1:

//UNION TEXT=firststring,FRIEND='ABC,Secondstring,ABAER'

例 2:

//UNION TEXT=firststring,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
//            FRIEND='ABC,SecondString,ABAER'

基本的に、1 行は 2 行または 3 行にまたがることができます。最後の文字が の場合,、継続文字として扱われます。

例 1 - テキストは 1 行です。例 2 - 同じテキストが 2 行あります。

例 1 では、おそらく以下のコードを記述できます。ただし、「入力テキスト」が継続文字に基づいて2行または3行にまたがる場合、これを行う方法がわかりません,

$result = Get-Content $file.fullName | ? { ($_ -match firststring) -and ($_ -match 'secondstring')}

「-and」条件を使用して複数行のテキストを検索できるようにする方法が必要だと思います。そんな感じ...

ありがとう!

4

3 に答える 3

0
# get the full content as one String
$content = Get-Content -Path $file.fullName -Raw
# join continued lines, split content and filter
$content -replace '(?<=,)\s*' -split '\r\n' -match 'firststring.+secondstring'
于 2013-06-16T15:37:27.510 に答える
0

ファイルが大きく、ファイル全体をメモリにロードすることを避けたい場合は、古き良き .NET ReadLine を使用することをお勧めします。

$reader = [System.IO.File]::OpenText("test.txt")
try {
    $sb = New-Object -TypeName "System.Text.StringBuilder";

    for(;;) {
        $line = $reader.ReadLine()
        if ($line -eq $null) { break }

        if ($line.EndsWith(','))
        {
            [void]$sb.Append($line)
        }
        else
        {
            [void]$sb.Append($line)
            # You have full line at this point.
            # Call string match or whatever you find appropriate.
            $fullLine = $sb.ToString()
            Write-Host $fullLine
            [void]$sb.Clear()
        }
    }
}
finally {
    $reader.Close()
}

ファイルが大きくない場合(1G未満としましょう)、Ansgar Wiechersの回答でうまくいくはずです。

于 2013-06-16T18:33:41.660 に答える