やあみんなCSVファイルの数字で列を並べ替えようとしています。しかし、どういうわけかそれは機能しません。サンプルCSV:
Orange;65
Red;160
Green;140
White;110
Purple;85
これは私が試したコードの一部です:
$csv = Import-Csv -Header "Color", "Number" -delimiter ';' data.csv
$csv | Sort-Object Number
これにより、次の出力が得られます。
Color Number
----- ------
White 110
Green 140
Red 160
Orange 65
Purple 85
明らかに正しい順序ではありません。誰かがこの問題を解決する方法を教えてもらえますか?ありがとうございました!
Import-CSV
は、デフォルトでcsv列をstrings
としてインポートします。 「アルファベット順」ではなく、値で並べ替える前に、それをint
にキャストする必要があります。例:
$csv = Import-Csv -Header "Color", "Number" -delimiter ';' data.csv
$csv | % { $_.Number = [int]$_.Number }
$csv | Sort-Object Number
Color Number
----- ------
Orange 65
Purple 85
White 110
Green 140
Red 160
別の方法として、次のようにソート中にキャストできます。
$csv = Import-Csv -Header "Color", "Number" -delimiter ';' data.csv
$csv | Sort-Object @{e={$_.Number -as [int]}}
またはさらに短い$csv | Sort-Object { [int]$_.Number }
Sort関数はこれらをテキスト文字列として認識しているようです。これらのテキスト文字列を実際の整数またはその他の数値タイプに解析してから、並べ替える必要があります。