1

我想知道 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不会保留任何尾随空格,所以我想知道它为什么会保留,因为这使它更难使用。

4

1 回答 1

0

应该保留(未引用的)字段周围的空格,但实际上解析器可能会有所不同。

空格被认为是字段的一部分,不应被忽略。

保存它们的最佳方法可能是用双引号将字段括起来:

" Foo   Bar   ";

只要确保分隔符和双引号之间没有空格,否则事情可能会变得陌生:)

于 2021-08-16T10:26:36.293 回答