2016-09-26 1 views
1

ich eine Liste in orders.csv haben etwa so:Erstellen Sie ein Array aus einer CSV-Liste

Order 
1025405008 
1054003899 
1055003868 
1079004365 

Ich möchte die Gerätenummer (2. bis 4. Zeichen) und die gesamte Auftragsnummer in ein Array hinzuzufügen, es so wird wie sein:

"0254","1025405008" 
"0540","1054003899" 
etc 
etc 

Ich möchte das Präfix "1" ignorieren. Bisher mit meiner begrenzten PS Wissen, ich habe die Variablen erstellt:

$Orders = Import-csv c:\Orderlist.csv 
$Units = $Orders | Select @{LABEL="Unit";EXPRESSION={$_.Order.Substring(1,4)}} 

So möchte ich die beiden in ein Array kombinieren. Ich habe versucht

$array = $Units,Orders 

Jede Hilfe wird geschätzt.

Antwort

3

können Sie wählen nur die Bestellung in Ihrer Select Anweisung verwenden ConvertTo-Csv Cmdlets die gewünschte Ausgabe zu erhalten:

$Orders = Import-csv c:\Orderlist.csv 
$unitOrderArray = $Orders | Select @{LABEL="Unit";EXPRESSION={$_.Order.Substring(1,4)}}, Order 
$unitOrderArray | ConvertTo-Csv -NoTypeInformation 

Ausgang:

"Unit","Order" 
"0254","1025405008" 
"0540","1054003899" 
"0550","1055003868" 
"0790","1079004365" 
+0

Hah! So einfach (wenn du weißt wie!). Danke – JDGEEK

4

Im Fall einer großen CSV-Datei das hat nur diese eine Spalte mit regexp ist viel schneller als Select:

$combined = [IO.File]::ReadAllText('c:\Orderlist.csv') ` 
    -replace '(?m)^\d(\d{4})\d+', '"$1","$&"' ` 
    -replace '^Order', 'Unit, Order' | ConvertFrom-Csv 

~ 6x schneller auf 100k Datensätze in einer 2MB-Datei (700ms vs 4100ms)

+0

Wofür steht '$ &' im Ersatz? Das habe ich noch nie zuvor gesehen. –

+1

Teil der ursprünglichen Zeichenfolge, die mit dem gesamten Muster übereinstimmt. – wOxxOm

+0

Wow, wie habe ich das verpasst? Ich habe immer verschachtelte Capture-Gruppen verwendet, um dies zu erreichen. Schön! –

Verwandte Themen