2016-09-26 111 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

哇,我怎么错过了?我总是使用嵌套捕获组来实现这一点。好一个! –