我将在文本文件中有一个名单列表: 例如: 史密斯三世 约翰逊JR。 利
我需要将后缀与姓氏分开。如果名称包含空格,则将确定后缀,如果该空间的右侧有少于4个字符的文本,则将被视为正常名称的一部分。然后,我需要将数据输出到包含三列的csv文件中;原始,姓氏,后缀。
有什么建议吗?
$InputLocation = "C:\test\suffix test\"
$OutputLocation = "C:\test\suffix test\"
$file = gci -Path $InputLocation
$lines = Get-Content($file.FullName)|
Foreach-object{
$pattern = "(.*)( )(.*)"
Write-Host $Matches[3]
if($_ -match $pattern -and $Matches[3] -lt 4){
$a = $Matches[0]
$b = $Matches[1]
$c = $Matches[3]
$output = $a + "," + $b + "," + $c
$output
}else{
$e = $_
$outputElse = $e + "," + $e
$outputElse
}
}| Set-Content($OutputLocation + "Output.csv")
这就是我所处的位置。这将几乎完美地工作,除了在一个不将JR作为后缀
的情况下Input file is a text file that looks similar to
Johnson
Smith Jr
Manca III
Clarke
Champagne
Manship (T)
Expected Output would be
Johnson|Johnson|<null>
Smith Jr.|Smith|Jr
Manca III|Manca|III
Clarke|Clarke|<null>
Champagne|Champagne|<null>
Manship (T)|Manship|(T)
答案 0 :(得分:0)
以下函数将执行您正在寻找的解析。它成功完成了你提供的测试串。
function Split-NameString
{
PARAM (
[Parameter(Mandatory = $true, ValueFromPipeline = $true)]
[string]$Name
)
PROCESS
{
$trimmedName = $Name.Trim()
$trimmedName -match "^(?<surname>.*?)(?:| (?<suffix>[^ ]{1,3}))$" | Out-Null
Write-Output (New-Object -TypeName PSCustomObject -Property @{
FullName = $trimmedName;
Surname = $Matches["surname"];
Suffix = $Matches["suffix"];
})
}
}
您可以做什么,从文件中读取字符串并将输出写入csv文件,如下所示:
$names = Get-Content "c:\input.txt"
$names | Split-NameString | Select FullName, Surname, Suffix | Export-Csv -NoTypeInformation -Path "C:\output.csv"
Select FullName, Surname, Suffix
部分是按照您在csv文件中的顺序获取列。