【发布时间】:2021-10-18 09:32:18
【问题描述】:
我想知道 PowerShell 究竟如何处理 CSV 标头中的(未加引号的)空格...
考虑这个简单的例子:
ConvertFrom-Csv @"
Foo;
Bar
"@ -Delim ";" | select "Foo"
像魅力一样工作。现在,当我在标题中添加一个空格时,它将被保留:
ConvertFrom-Csv @"
Foo ;
Bar
"@ -Delim ";" | select "Foo "
很公平。但是当我添加更多空格时,属性名称的末尾仍然会有只有一个空格:
ConvertFrom-Csv @"
Foo ;
Bar
"@ -Delim ";" | select "Foo "
我在想,也许 PowerShell 用一个空格替换多个连续的空格,以清理由多个单词组成的标题,但没有:
ConvertFrom-Csv @"
Foo Bar;
Hello
"@ -Delim ";" | select "Foo Bar"
更奇怪的是:现在,任何末尾的空格似乎都被保留了,奇怪的“单个空格”行为消失了:
ConvertFrom-Csv @"
Foo Bar ;
Hello
"@ -Delim ";" | select "Foo Bar "
另外,请注意任何 前导 空格显然总是被修剪。但到目前为止,我还没有做更多的测试。
谁能解释这种行为?
我找不到任何文档。如果所有的空白要么总是被保留,要么总是被修剪,这将是有意义的。但是这种行为非常难以处理。 Import-Csv 似乎也有同样的行为。
(版本:PowerShell 5.1)
编辑
请注意,我不拥有 CSV。它是由客户提供的。我知道可以引用标题,但这是关于现有 CSV 的处理,而不是如何修改它。我知道如何解决这个问题,但这不是问题的目的。
理想情况下,我希望 PowerShell不会保留任何尾随空格,所以我想知道为什么它会保留,因为这使得使用起来更加困难。
【问题讨论】:
-
这是一个真正的
ConvertFrom-Csv/Import-Csvcmdlet 特定问题。老实说,我对此过于关注,因为如果csv标头有任何(前导或尾随)空格(也用于可读性),我会简单地引用它们,例如' " Foo Bar " '; ...。在这种情况下,没有讨论空格是标题的一部分还是分隔符的一部分。 -
当然是关于这两个 cmdlet,正如我在问题中所述。这几乎就是 PowerShell 的内置 CSV 处理的全部内容。另外,请注意我的编辑。我知道可以引用标题,但这不是重点。
-
您可以考虑将您的反馈发送至documentation 或(基于@Danny_ds 的回答)purpose a (break?) change on the cmdlets
标签: powershell csv powershell-5.1