CSV ファイルを読み込む
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