Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 从CSV列表创建数组_Arrays_Powershell_Csv - Fatal编程技术网

Arrays 从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

我在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

任何帮助都将不胜感激。

您只需在
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!那很容易(当你知道怎么做的时候!)。谢谢你!那很容易(当你知道怎么做的时候!)。谢谢,
$&
在替换中代表什么?我以前从未见过。原始字符串的一部分与整个模式匹配。哇,我怎么会错过呢?我总是使用嵌套的捕获组来实现这一点。好极了!。
$&
在替换中代表什么?我以前从未见过。原始字符串的一部分与整个模式匹配。哇,我怎么会错过呢?我总是使用嵌套的捕获组来实现这一点。好极了!。