2013-02-23 16 views
10

Hey Leute, ich versuche ein colomn mit Zahlen in einer CSV-Datei zu sortieren. Aber irgendwie funktioniert es nicht. Beispiel CSV:Sort-Object und Integer

Orange;65 
Red;160 
Green;140 
White;110 
Purple;85 

Dies ist das Stück Code, ich versuchte es mit:

$csv = Import-Csv -Header "Color", "Number" -delimiter ';' data.csv 
$csv | Sort-Object Number 

der mir die folgenden Ausgabe gibt:

Color    Number 
-----    ------ 
White    110 
Green    140 
Red     160 
Orange    65 
Purple    85 

Offensichtlich nicht in der richtigen Reihenfolge. Kann mir bitte jemand erklären, wie ich dieses Problem lösen kann? Vielen Dank!

Antwort

29

Import-CSV importiert CSV-Spalten standardmäßig als strings. Sie müssen es in int umwandeln, bevor Sie nach Wert sortieren können und nicht "alphabetisch". Ex:

$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 

Als Alternative, können Sie es werfen beim Sortieren, wie folgt aus:

$csv = Import-Csv -Header "Color", "Number" -delimiter ';' data.csv 
$csv | Sort-Object @{e={$_.Number -as [int]}} 

oder noch kürzer $csv | Sort-Object { [int]$_.Number }

+0

Prost Mate hat das aussortiert :) – ScriptingBerry

+0

Könnten Sie mir erklären, von Ihrer Alternative, was bedeutet das @ {e =? Vor allem das "e". Entschuldigen Sie die Störung, ich lerne immer noch :) – ScriptingBerry

+1

Ausdruck. Es ist etwas, das Sie verwenden, um Eigenschaften in Powershell anzugeben. Beispiel für ein benutzerdefiniertes Feld in 'select-object':' select-object @ {name = "angezeigterName"; expression = {code, um einen Wert mit ex $ _. Property etc.}} zu erzeugen. 'Sort-Object' benötigt keinen Spaltennamen um zu sortieren, also habe ich nur Ausdruck benutzt. –

0

Es scheint, dass die Sortierfunktion diese als Textstrings sieht. Sie müssen diese Textzeichenfolgen zu tatsächlichen Ganzzahlen oder anderen numerischen Typen analysieren und dann sortieren.

+0

Könnte eine Idee in Zukunft sein, die, wie zu schaffen, und nicht nur das Warum. – user66001