Это достаточно общий вопрос, но мне интересно, может ли какой-нибудь гуру PS посоветовать, насколько эффективен мой метод сортировки и рекомбинации некоторых полей данных с использованием массива PSCustomObjects.
Я импортирую файл CSV, который содержит ряд личных данных, в том числе полные имена в одном поле, которые имеют различные разделители между именами и фамилиями (например, запятая, пробел, запятая + пробел, точка с запятой и т. Д.).Фамилия на первом месте.Санация этих вариантов также является целью.
Набор данных должен быть отсортирован по фамилии и повторно собран с одним полем FullName.Простая сортировка по полю FullName не работает надежно, учитывая разнообразие разделителей между частями имени.
Я попытался создать массив новых PSCustomObjects, который включает в себя все исходные поля из CSVплюс поле полного имени, разделенное на два новых поля имени.Затем он сортируется по фамилии, и результаты сохраняются в новом массиве, готовом к выводу, объединяя поля разделенных ранее имен вместе с запятой и пробелом.
Любые предложения по повышению эффективности приветствуются.
$data = import-csv .\Cust.csv
# CSV fields: FullName, StreetAddress, City, Postcode
# Create a temporary array for sorting
$splitNames = @()
$data | foreach {
$spltName = $_.FullName -split '[\s|,|;]+'
$splitNames += [PSCustomObject]@{
Last = $spltName[0]
First = $spltName[1]
StreetAddress = $_.StreetAddress
City = $_.City
Postcode = $_.Postcode
}
}
# Create an output array to hold the final result
$sortedNames = @()
# Sort the temporary array by lastname, rejoin name field and add to output array
$splitNames | Sort Last | foreach {
$FullName = $_.Last, $_.First -join ', '
$sortednames += [PSCustomObject]@{
FullName = $Fullname
StreetAddress = $_.StreetAddress
City = $_.City
Postcode = $_.Postcode
}
}
$sortednames