这是一个相当普遍的问题,但是我想知道某些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