hakeの日記

Windows環境でプログラミングの勉強をしています。

PowerShell - ForEach-Objectの多重使用 - CSVファイルを読み取りデータに1を加算して出力する

Get-Content ".\test.csv" | %{
    (   # 1行ごとの処理
        $_ -split "," | %{
            # 1データごとの処理
            [int]$_ + 1
        }
    ) -join ","
} | Write-Output

test.csv

1,2,3
4,5,6
7,8,9

結果

2,3,4
5,6,7
8,9,10

普通のプログラムっぽい書き方(ForEach-Objectは使用しない)

$lines = Get-Content ".\test.csv"
foreach ($line in $lines) {
    $data = $line -split ","
    $ary = @()
    foreach ($datum in $data) {
        $ary += [int]$datum + 1
    }
    Write-Host ($ary -join ",")
}

CSVにヘッダがある場合

$isHeader = $true
Get-Content ".\test.csv" | %{
    if($isHeader){
        $isHeader = $false
        $_
    } else {
        ( $_ -split "," | %{ [int]$_ + 1} ) -join ","
    }
}