[Powershell] CSVファイルの読み込み時、列の数を取得する方法

はじめに

CSVファイルを読み込む際、正しいCSVファイルかどうかを確認するために列の数が正しいかどうかチェックしたい場合があります。

その場合の方法を備忘録として残しておきます。

実行環境

カテゴリ内容
OSWindows 10 Pro 2202
PSVersion5.1.22000.653

Measure-Objectを使ってMaximum列数を取得する

CSVファイルのヘッダー列の数が正しいかどうかは下記のように取得することができます。

$numberOfColumns = Get-Content ".¥test.csv" | 
  ForEach-Object{($_.split(",")).Count} | 
  Measure-Object -Maximum | 
  Select-Object -ExpandProperty Maximum

Get-Contentを利用してファイルを取得し、「ForEach-Object」「Measure-Object」「Select-Object」をパイプラインで繋げます。

ForEach-Objectではカンマ区切りで一行分のをカウントします。
Measure-Objectでは、Maximumオプションを指定して、その最大値を取得します。
その後Select-Object を利用してその最大値を出力します。

ただし、本ケースの場合ヘッダー以外の行の列数が異なる場合もエラーとなります。
各行も厳密にチェックしたい場合は、こちらを使うと良いかと思います。

Select-Objectを利用して1行目から列数を取得する

先ほどは、前行数に対する列をチェックするようにしていますが、下記は1行目にヘッダーが存在する場合にその1行目の列数をSelect-Objectを利用して取得します、

$numberOfColumns = Get-Content ".¥test.csv" | ForEach-Object{($_.split(",")).Count} | Select-Object -First 1

最後に

CSVファイルに対するチェック色々ありますが、列数もチェックしておくと、不正な列が追加されていても問題なく処理されると思います。

是非ご参考までに。

タイトルとURLをコピーしました