@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