PowerShell で CSV の列数が定義と合っているか確認したメモ

サンプル CSV データの仕様

  • CSV の列定義は「名前,生年月日,血液型,ニックネーム」とする
  • 1 行目は列数が定義通り、2 行目は列数が定義より少ない、3 行目は列数が定義より多い
Aさん,1974/01/07,A,Aちゃん
Bさん,1984/10/13,B
Cさん,1985/05/05,A,Cちゃん,コスプレ

コードと説明

$csv = @"
Aさん,1974/01/07,A,Aちゃん
Bさん,1984/10/13,B
Cさん,1985/05/05,A,Cちゃん,コスプレ
"@

$csv | ConvertFrom-Csv -Header "Name","Birthday","BloodType","NickName","Dummy" | %{
    if ($_.NickName -eq $null) {
        Write-Host ("{0} は列数が少ない" -f $_.Name)
    } elseif ($_.Dummy -ne $null) {
        Write-Host ("{0} は列数が多い" -f $_.Name)
    } else {
        Write-Host ("{0} の列数はちょうどいい感じ" -f $_.Name)
    }
}

実行結果

Aさん の列数はちょうどいい感じ
Bさん は列数が少ない
Cさん は列数が多い

規定の列のあとに Dummy という列を追加して、次のように判定している

  • Dummy$null ではない時、定義より列数が多い
  • NickName$null の時、定義より列数が少ない