PowerShellでCSVファイルを読み込み各行の項目数をカウントする。

powershell7 コンピュータ
powershell7

Excelなどを使ってCSVファイルを作ると仕様に合わないデータが出来上がることがあります。
初歩的ではありますが項目内に区切り文字であるカンマ「,」が含まれていたりすると、項目数が仕様と異なりエラーとなってしまうことがあります。
まぁ今時、手作業でCSVファイルを作るなということなのかもしれませんが、そうも言っていられないので項目数カウントするだけのスクリプトを作ってみたいと思います。

PowerShellにはCSVファイルを扱うライブラリがあったと思いますが、今回は使いません。

param($csvfile=".\test.csv")

Get-Content -LiteralPath $csvfile | ForEach-Object -begin {$line = 0} -process {
    $line += 1
    $fields = $_ -split ","
    [PSCustomObject]@{line=$line; count=$fields.Count}
}

結果

PS H:\ps1> .\CountCSVFields.ps1

line count
---- -----
   1    44
   2    44
   3    44
   4    44
   5    44
   6    43
   7    44
   8    45
   9    43
  10    45

サンプルのCSVで実行した結果countが43~45とばらついており、多分CSVの仕様とは異なっていると思われます。
CSVファイルの文字コードや改行コードに気を使う必要がありますが、powershell7であれば問題も少ないかと思います。

コメント