从CSV列表创建一个数组

时间:2016-09-26 10:26:10

标签: arrays powershell csv

我在orders.csv中有一个列表,如此:

Order
1025405008
1054003899
1055003868
1079004365

我希望将单位编号(第2至第4个字符)和整个订单编号添加到数组中,因此它将如下:

"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

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:4)

如果一个大的CSV文件使用regexp只有这一列比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对4100ms)

答案 1 :(得分: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"