将一个列拆分为2个CSV,如果一个名称

wlp8pajw  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(52)

我需要从多个人导出联系人,并以特定的方式修改选项卡分隔文件为CSV.导出的文件只有两列,名称和电子邮件,但我需要它是电子邮件,名称,名字,姓氏.我的脚本,虽然可能原油,我设置它作为一个sendto运行,确实有效。但是如果某人没有列出第二个名字,我会遇到一个问题。我可以在分割周围放一个if语句吗?当我尝试时,它总是中断。
这里是一些像我开始的样本日期。它以两列开始,我需要跳过几行,然后是一个姓名/电子邮件列表。它确实在tab del中。但这很难在这里显示。
组名groupxyz
成员
比尔·泰德,email protected(https://stackoverflow.com/cdn-cgi/l/email-protection),
里克·塞布,email protected(https://stackoverflow.com/cdn-cgi/l/email-protection),
苏茜,email protected(https://stackoverflow.com/cdn-cgi/l/email-protection),
汤姆·克鲁兹,email protected(https://stackoverflow.com/cdn-cgi/l/email-protection),
这是我的代码到目前为止。

"Received $($args.Count) files:"
foreach( $path in $args ) {
"Processing file: $path"   
$filename = [System.IO.Path]::GetFileName($path)
}
Import-CSV -Path $path  -Delimiter "," -Header Email, Name, FirstName, LastName | select -skip 4 |
ForEach-Object{
$first, $last = $_.Email -split " "
$_.FirstName = "$first"
$_.LastName = "$last"
$email = $_.Name
$_.Name = "$first $last"
$_.Email = $email
$_
} |
 Export-CSV C:\Users\jjasper\Desktop\Composer\ContactExport\result\$filename -Delimiter "," -NoTypeInformation
(Get-Content -Path C:\import\$filename ).Replace('"','') | Set-Content -Path C:\import\$filename
(Get-Content -Path C:\import\$filename ) | ? {$_.trim() -ne "" } | set-content C:\import\$filename

字符串

hgc7kmma

hgc7kmma1#

如果没有CSV内容的样本,很难帮助你。但是,我认为你应该尝试使用对象来按照你想要的方式操作数据,例如,如果你的CSV有4个头,这里是你可以做的。

$csvImport = Import-CSV -Path $path -Header Email, Name, FirstName, LastName

$reOrderExport=@()

foreach($row in $csvImport){

    $obj=[PSCustomObject]@{
        Name = $row.FirstName + $row.LastName
        email = $row.Email
        userName = ($row.Email -split '@')[0]
        familiyName = if($row.LastName -like ''){
            'noLastName'
        }else{
            $row.LastName
        }
    }

    $reOrderExport+=$obj
    
}

$reOrderExport | Export-CSV -Path $exportPath -NoTypeInformation

字符串
您只需获取所有CSV内容,并通过导入的数据生成所需的数组,然后导出该数组,或者如果您查看CSV列表,则继续将其添加到文件中。

相关问题