当尝试解析字段内带有换行符的 CSV 数据时,ConvertFrom-Csv 将无法正常工作。这是一个例子:
测试.csv
name,address
John Doe,"123 Easy Way
Apt. 10
Somewhere, USA"
Jane Doe,"456 Main St
Unit 5
SomewhereElse, USA"
正确解析
> Import-Csv test.csv
name address
---- -------
John Doe 123 Easy Way...
Jane Doe 456 Main St...
解析不当
> Get-Content test.csv | ConvertFrom-Csv
name address
---- -------
John Doe 123 Easy Way
Apt. 10
Somewhere USA"
Jane Doe 456 Main St
Unit 5
SomewhereElse USA"
如此处所示,换行符被解析为新记录而不是字段中的换行符。你是如何解决这个问题的?
最佳答案
尝试解析字段内带有换行符的 CSV 数据时,使用 ConvertFrom-Csv 方法会出现问题。这是因为换行符用作分隔符而不是传递给 ConvertFromCsv 方法。 根据您获取 CSV 的方式,解决此问题的方法会有所不同:
使用 -Raw
开关正确解析
PS> Get-Content -raw test.csv | ConvertFrom-Csv
name address
---- -------
John Doe 123 Easy Way...
Jane Doe 456 Main St...
虽然这适用于 Get-Content 命令,但不适用于可能将 CSV 返回到管道的任意命令。要处理这些情况,请通过“Out-String”命令通过管道输出。
正确的管道解析
我发现有 2 种变体可以工作:
PS> <command> | Out-String | ConvertFrom-Csv
下面这个方法感谢#Powershell 中的sifb。它有点“hacky”,但工作得很好并且可以使用它。
PS> (<command>) -join "`r`n" | ConvertFrom-Csv
关于Powershell 使用 ConvertFrom-Csv 解析带有换行符的管道 CSV 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53218416/