概要
Import-Csvで、csvファイル内の空白の扱いには注意が必要。
* デリミタ記号の前に空白を入れない
* デリミタ記号の前後に連続した空白を使用する場合、””で括るようにする
解説
ヘッダ行のデリミタ前後に空白がない場合
column_a ,column_b ,column_c a1,b1,c1 a2,b2,c2 a3,b3,c3 a4,b4,c4 a5,b5,c5
デリミタの前に空白がある場合
column_a ,column_b ,column_c a1 ,b1 ,c1 a2 ,b2 ,c2 a3 ,b3 ,c3 a4 ,b4 ,c4 a5 ,b5 ,c5
この場合読めません。
というか、カラム指定を”column_b “(後ろに1つ空白入れる)にすると読めます。
デリミタ前の空白は2つ以上でも、ヘッダ名には空白1個付いた状態になります。
column_a ,column_b ,column_c a1 ,b1 ,c1 a2 ,b2 ,c2 a3 ,b3 ,c3 a4 ,b4 ,c4 a5 ,b5 ,c5
デリミタの後に空白がある場合
column_a, column_b, column_c a1, b1, c1 a2, b2, c2 a3, b3, c3 a4, b4, c4 a5, b5, c5
この場合、ヘッダ名は空白なし…つまり、デリミタ前後に空白を入れなかったケースと同じになります。
データも同じように処理されているっぽいので、Import-Csvでは「デリミタ記号の前にある連続した半角空白は、1つの半角空白として取り扱われる」ようです。ややこしいので、このようなcsvは指定しないようにした方が良さそうです。
なお、””で括った場合は、括られた文字列通りに扱われます。
まとめ
通常は次の点に注意しておく必要がありそうです。
* デリミタ記号の前に空白を入れない
* デリミタ記号の前後に連続した空白を使用する場合、””で括るようにする
余談
vimのAlignでcsvを整形すると、デリミタの前後に半角空白が入るんだよ…