当尝试解析字段内带有换行符的 CSV 数据时,ConvertFrom-Csv 将无法正常工作。这是一个例子:
name,address
John Doe,"123 Easy Way
Apt. 10
Somewhere, USA"
Jane Doe,"456 Main St
Unit 5
SomewhereElse, USA"
Run Code Online (Sandbox Code Playgroud)
> Import-Csv test.csv
name address
---- -------
John Doe 123 Easy Way...
Jane Doe 456 Main St...
Run Code Online (Sandbox Code Playgroud)
> 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"
Run Code Online (Sandbox Code Playgroud)
如此处所示,换行符被解析为新记录而不是字段内的换行符。你怎么解决这个问题?
当尝试解析字段内带有换行符的 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...
Run Code Online (Sandbox Code Playgroud)
虽然这适用于 Get-Content 命令,但不适用于可能将 CSV 返回到管道的任意命令。要处理这些情况,请通过“Out-String”命令通过管道输出。
我发现有两种可行的变体:
PS> <command> | Out-String | ConvertFrom-Csv
Run Code Online (Sandbox Code Playgroud)
下面的方法要感谢 #Powershell 中的 sifb。它有点“hacky”,但工作得很好并且可以有它的用途。
PS> (<command>) -join "`r`n" | ConvertFrom-Csv
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
801 次 |
| 最近记录: |