CSVファイルを解析する
@IT - .NET TIPS CSVファイルを読み込むには?を参考に、PowerShellでCSVファイルを解析する関数を書きました。
- 引数のファイルを「Microsoft.VisualBasic.FileIO.TextFieldParser」で解析して、
- 各行をスクリプトブロック(proc)にコールバックします。
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.VisualBasic") # 引数で指定したCSVファイルのデータを列挙する。 # @param $file ファイルパス # @param $proc 各行データがコールバックされる関数 function global:ReadCSV( $file, $proc ) { $close = { if ($parser -ne $null) { $parser.Close(); } } $parser = $null; $parser = New-Object Microsoft.VisualBasic.FileIO.TextFieldParser($file, [System.Text.Encoding]::GetEncoding("Shift_JIS")); $parser.TextFieldType = [Microsoft.VisualBasic.FileIO.FieldType]::Delimited; $parser.SetDelimiters(","); while (!$parser.EndOfData) { $row = $parser.ReadFields(); &$proc $row; } trap { &$close; break; } &$close; }
a,b,"c", d,e,"あああ", g,"h h",i,
解析。
PS C:\> .\utils.ps1 PS C:\> ReadCSV ".\test.csv" { echo $args[0] }
実行結果です。
a b c d e あああ g h h i