如何使用脚本

时间:2018-08-08 15:16:41

标签: string powershell csv text quotes

具有包含多列信息的CSV文件。需要删除"Employee Name中的,开头和结尾,如下所示。

Employee Name,Employee #,column3, column4 etc. <br>
"Lastname, Firstname",123,abc,xyz<br>
"Lastname, Firstname",123,abc,xyz<br>

结果:

Employee Name,Employee #,column3, column4 etc.<br>
Lastname Firstname,123,abc,xyz<br>
Lastname Firstname,123,abc,xyz<br>

尝试使用以下Powershell脚本:

(gc C:\pathtocsv.csv) | % {$_ -replace '"', ""} | out-file C:\pathtocsv.csv -Fo -En ascii

这只会删除" "周围的Lastname , Firstname,但是在文本编辑器中打开csv文件时逗号仍然存在。需要这种格式才能将数据发送到另一家公司。我尝试过的所有内容都删除了每个逗号。 Powershell和其他语言的新手,我相信这很容易解决。请帮忙!

2 个答案:

答案 0 :(得分:1)

Powershell对CSV文件具有很多内置处理功能,您可以使用以下内容删除所需的逗号,而不是尝试将其视为文本文件:

Import-Csv .\a.csv | % {
    $_."Employee Name" = ($_."Employee Name" -replace ',','')
    $_ #return modified rows
} | Export-Csv .\b.csv -notype -delim ','

默认情况下,这将导出所有带有双引号的内容,因此您可能需要返回并运行以下内容:

(gc .\b.csv -raw) -replace '"','' | Out-File .\c.csv

也删除所有双引号。

答案 1 :(得分:1)

警告:如果文本包含特殊字符(即逗号,引号),则引号很重要

如果您确实要删除行,则可以将csv作为常规文本文件进行处理:

#sample data
@'
"Lastname, Firstname",123,abc,xyz
"Lastname, Firstname",123,abc,xyz
'@ | out-file c:\temp\test.csv

Get-Content c:\temp\test.csv | % {
    $match = [Regex]::Match($_,'"([^,]*), ([^"]*)"(.*)')
    if ($match.Success) {
        $match.Groups[1].Value+' '+$match.Groups[2].Value+$match.Groups[3].Value
    } else {
        $_ #skip processing if line format do not match pattern
    }
}