【问题标题】:Powershell CSV removing newline from last cellPowershell CSV 从最后一个单元格中删除换行符
【发布时间】:2013-11-03 12:53:09
【问题描述】:

我有一个格式如下的 CSV 文件:

ID,Name,Notes,Status
1,aaa,blah,
blah2,status1
2,bbb,foo,status1
3,ccc,pow,
pow2,status1

如您所见,“备注”列中的某些单元格包含逗号和换行符。我需要将这些字符替换为空格,并将新行中的数据聚合到上一行的 Notes 单元格中,同时仍将状态带入 Status 列,使其看起来像这样:

ID,Name,Notes,Status
1,aaa,blah blah2,status1
2,bbb,foo,status1
3,ccc,pow pow2,status1

我想出了以下sn-p:

(Import-Csv $reportfile) | % {
  $_.Notes = $_.Notes -replace "`r`n",' '
  $_.Notes = $_.Notes -replace "`n",' '
  $_.Notes = $_.Notes -replace ',',' '
  $_
} | Export-Csv $newfile -NoTypeInformation

问题是当文件被导入时,一行中的数据被Powershell解释为一行。所以当我导出它时,它仍然保存在自己的行中。有什么想法可以如何以不同的方式导入文件并仍然完成从该列中替换那些不需要的字符?

【问题讨论】:

  • Import-Csv 读取文件并根据 CSV 文件的工作方式对其进行解释。如果您的文件不是 CSV 文件或以某种方式违反 RFC 4180,那么事情当然会变得奇怪。不过,您始终可以预处理文件的内容并将它们传递给ConvertFrom-Csv。
  • 如何在不使用 Import-CSV 的情况下预处理文件并仅触摸这些列?

标签: .net powershell csv powershell-2.0


【解决方案1】:

您可以尝试以下方法:

(Get-Content -ReadCount 0 $reportfile) -replace ',\r\n(?=\D)', ' ' -split "`r`n" | ConvertFrom-Csv

(未经测试)

这将首先将文件作为单个字符串读取,然后将行尾的逗号替换为空格,然后将换行符替换为空格,然后在换行符处拆分字符串并将其传递给ConvertFrom-Csv。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    • 2018-12-29
    • 2016-06-05
    相关资源
    最近更新 更多