Arrays 从CSV列表创建数组
我在orders.csv中有一个列表,如下所示:Arrays 从CSV列表创建数组,arrays,powershell,csv,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
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
任何帮助都将不胜感激。您只需在
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"
您只需在
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"
对于只有这一列的大型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 vs 4100ms)对于只有这一列的大型CSV文件,使用regexp比选择要快得多:
$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)Hah!那很容易(当你知道怎么做的时候!)。谢谢你!那很容易(当你知道怎么做的时候!)。谢谢,
$&
在替换中代表什么?我以前从未见过。原始字符串的一部分与整个模式匹配。哇,我怎么会错过呢?我总是使用嵌套的捕获组来实现这一点。好极了!。$&
在替换中代表什么?我以前从未见过。原始字符串的一部分与整个模式匹配。哇,我怎么会错过呢?我总是使用嵌套的捕获组来实现这一点。好极了!。