2016-09-26 107 views
1

我有一個列表中orders.csv像這樣:創建從CSV列表陣列

Order 
1025405008 
1054003899 
1055003868 
1079004365 

我希望的單元號(第二 - 第四個字符)和整個訂單號碼添加到一個數組,所以它會像:

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

我希望忽略前綴「1」。到目前爲止,憑藉我有限的PS知識,我創建了以下變量:

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

所以我希望將兩者結合到一個數組中。我試過

$array = $Units,Orders 

任何幫助將不勝感激。

回答

3

您只需選擇您Select語句中的訂購和使用ConvertTo-Csv cmdlet來獲取所需的輸出:

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

輸出:

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

哈!這很容易(當你知道如何!)。謝謝 – JDGEEK

4

在一個大的CSV文件的情況下,只有這一列使用正則表達式比Select快得多:

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

對於2MB文件中的100k記錄,速度提高6倍(700ms vs 4100ms)

+0

'$&'代表什麼?我以前從來沒有見過。 –

+1

匹配整個模式的原始字符串的一部分。 – wOxxOm

+0

哇,我怎麼錯過了?我總是使用嵌套捕獲組來實現這一點。好一個! –