2016-09-26 3 views
1

У меня есть список в orders.csv так:Создать массив из списка 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 

Любая помощь будет оценена по достоинству.

ответ

3

Вы можете просто выбрать порядок в вашем Select заявления и использовать ConvertTo-Csv командлет, чтобы получить желаемый результат:

$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

Hah! Это легко (когда вы знаете, как!). Спасибо – JDGEEK

4

В случае большого файла CSV который имеет только этот столбец с использованием regexp намного быстрее, чем Select:

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

~ 6 раз быстрее на 100 тыс. Записей в файле 2 МБ (700 мс против 4100 мс)

+0

Что означает '$ &' для замены? Я этого раньше не видел. –

+1

Часть оригинальной строки, которая соответствует всему шаблону. – wOxxOm

+0

Вау, как я пропустил это? Для этого я всегда использовал вложенные группы захвата. Хороший! –

Смежные вопросы