CSV ファイルを読み込む

メモ:  Category:powershell

PowerShell で CSV ファイルを読み込むには、 Import-Csv コマンドレットを使用します。

CSV ファイルを読み込む

CSV ファイルを読み込む Import-Csv コマンドレットは、次のような書式で実行します。

「-Delimiter」には区切り文字を指定します。

デフォルトはカンマ(,)になっており、タブ区切りのを指定したい場合は「`t」(バッククォート + t)とします。

「-Encoding」には、読み込まれた CSV ファイルのエンコードを指定します。 PowerShell のバージョンによってデフォルトが異なるようですが、 5.1 のデフォルトは Shift JIS になっており UTF8 のファイルを読み込む場合は、「-Encoding UTF8」と指定します。

Import-Csv ファイル名 -Delimiter 区切り文字 -Encoding 文字コード

例えば、次のような sample.csv ファイルがあるとします。

IP,MAC,COMMENT
192.168.200.1,C81F66111100,名前1
192.168.200.2,C81F66111110,名前2
192.168.200.3,C81F661111AA,名前3

このファイルを読み込むには、次のように実行します。

> Import-Csv sample.csv -Encoding UTF8

実行すると次のように出力されます。

IP            MAC          COMMENT
--            ---          -------
192.168.200.1 C81F66111100 名前1
192.168.200.2 C81F66111110 名前2
192.168.200.3 C81F661111AA 名前3

読み込んだデータを順に処理したい場合、次のように ForEach-Object を使って処理を行います。

個々の値は、「$_.IP」や「$_.MAC」のように項目名を指定することで取得できます。

> Import-Csv c:\temp\sample.csv -Encoding UTF8 | ForEach-Object { Write-Host $_.IP }

読み込んだ CSV ファイルを変数で保持する

Import-Csv コマンドレットは、変数に保持して処理することもできます。

$addrs = Import-Csv "c:\temp\sample.csv" -Encoding UTF8

foreach ($addr in $addrs) {
    Write-Host "レコード:$($addr)"
    Write-Host "MAC Address:$($addr.MAC)"
}

スクリプトを実行すると、次のように出力されます。

レコード:@{IP=192.168.200.1; MAC=C81F66111100; COMMENT=名前1}
MAC Address:C81F66111100
レコード:@{IP=192.168.200.2; MAC=C81F66111110; COMMENT=名前2}
MAC Address:C81F66111110
レコード:@{IP=192.168.200.3; MAC=C81F661111AA; COMMENT=名前3}
MAC Address:C81F661111AA

ヘッダーが無い場合

Import-Csv コマンドレットは先頭行をヘッダー(項目名)として読み込みます。1 行目からデータが格納されているファイルの場合、 「-Header」パラメータで項目名を指定します。

> Import-Csv c:\temp\sample.csv -Header IP,MAC,COMMENT -Encoding UTF8

bluenote by BBB