LoginSignup
24
22

More than 5 years have passed since last update.

PowerShellでタブ区切りのcsvファイルを読み込む

Last updated at Posted at 2016-06-29

前提

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
24
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
22