前提
ps1ファイルはtest.csvと同じディレクトリにあり、
csvファイルは以下のような内容と想定。
先頭の1行はヘッダ、区切り文字はタブ。
文字コードはUTF8
test.csv
No ユーザー名 銀行残高 最終取引日時
1 hoge1 10000 2016/06/01 12:00:00
2 hoge2 100 2016/05/02 00:00:00
3 hoge3 9999999 2010/01/01 23:59:59
読み込み
変数 $csv にデータを保存する。
test.ps1
$csv = Import-Csv .\test.csv -Delimiter "`t"
"t" は水平タブを表す特殊文字。
(バッククォート)と1文字で表現される。
他には以下のような種類がある。
文字 | 意味 |
---|---|
`$ | ドルマーク |
`a | 警告 |
`b | バックスペース |
`n | 改行 |
`r | キャリッジリターン |
`t | 水平タブ |
`' | シングルクォーテーション |
`" | ダブルクォーテーション |
`` | バッククォート |
`v | 垂直タブ |
エンコード
Import-Csv .\test.csv -Delimiter "`t" -Encoding Default
上記のようにすると、csvファイルがsjisでも文字化けせずに読める。
ただし、PowerShell 3.0 以上でないと -Encoding の指定が対応していない。
https://technet.microsoft.com/ja-jp/library/hh849891.aspx
条件をつけて読み込み
# 日付
$date = "2016/06/01 00:00:00"
# フィルター
$csv_filter =
{
$baseDate = Get-Date $date -Format "yyyy/MM/dd"
$csvDate = Get-Date $_."最終取引日時" -Format "yyyy/MM/dd"
return ($_."銀行残高" -ge 10000) -and ($csvDate -ge $baseDate)
}
# 読み込み
$csv = (Import-Csv .\test.csv -Delimiter "`t" | Where-Object $csv_filter)
のようにすると、$csvにはNo.1のデータのみ格納される。
要素の参照
読み込んだ変数の内容を参照する。
変数."ヘッダ名" で参照できる。
英数字のみであれば " は必要ない。
$csv[0].No
$csv[1]."ユーザー名"
$csv[2]."銀行残高"
出力
1
hoge2
9999999