【问题标题】:How to maniuplate text in first column of CSV file with script如何使用脚本操作 CSV 文件第一列中的文本
【发布时间】:2018-08-08 15:16:41
【问题描述】:

拥有一个包含多列信息的 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 和其他语言的新手,我相信这很容易解决。请帮忙!

【问题讨论】:

    标签: string powershell csv text quotes


    【解决方案1】:

    Powershell 有很多对 CSV 文件的内置处理,而不是尝试将 is 视为文本文件,您可以使用以下内容仅删除您想要的逗号:

    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

    同时删除所有双引号。

    【讨论】:

    • colsw,您提供的解决方案有效!我尝试了第一个解决方案,但将所有内容放在一个列中。我不能为此感谢你。现在我需要在经理的计算机上放置一个 powershell 脚本来获取任何 csv 文件并将其输出,以便每两周发送一次。再次感谢!
    • @BryanW 没问题-如果在 excel 中打开时全部进入一列,那可能是系统分隔符不是逗号的问题(很多时候默认分号)-您可以更改 (或删除)要匹配的代码末尾的-delim ',' 部分。如果这回答了您的问题,请随时在 up/downvote 按钮下打勾接受答案,以便其他人可以看到它已关闭。
    • 非常酷,从未使用过%$_ #return modified rows。它们是什么意思
    • @TheGameiswar % 只是Foreach-Object 的别名,$_ 是 foreach 内的“当前管道对象”,所以我修改了它的一个属性,然后将其传递回管道以便可以导出,#return modified rows 位只是一个注释。
    • 感谢回复
    【解决方案2】:

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

    如果你真的想去除线条,你可以把你的 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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-02-13
      • 1970-01-01
      • 2010-09-25
      • 1970-01-01
      • 2012-03-26
      • 1970-01-01
      • 1970-01-01
      • 2017-02-11
      • 2017-11-16
      相关资源
      最近更新 更多