带有尾随空格的CSV列标题?

时间:2015-04-16 18:54:11

标签: powershell

我有一些CSV文件。以下是一个例子。请注意,列B YC Z的标题包含尾随空格。

A X,B Y ,C Z  ,D
1,2,3,4
....

以下脚本返回B YC Z的空值。

Import-Csv .\test.csv | select -Property "A X", "B Y", "C Z" 

即使列标题中有尾随空格,它是否是一种返回值的方法?

3 个答案:

答案 0 :(得分:1)

有一个简单的解决方案,但它有一个警告

Import-Csv c:\temp\temp.csv | select -Property "A X*", "B Y*", "C Z*"

使用星号,它匹配 C Z开头的列。虽然不是在这种情况下,但是也有可能与其他列匹配。就像有两列“C Z”和“C Znotme”一样,两者都会被退回。

另一个想法

如果您愿意,可以通过从列

中删除那些外部空格来修复文件
$path = "c:\temp\temp.csv"
$file = Get-Content $path
($file[0] -replace "\s*,\s*",",").Trim()  | Set-Content $path
$file | Select -Skip 1 | Add-Content $path
  • "\s*,\s*",","会替换逗号
  • 周围的空格
  • .Trim()会获得任何前导或尾随空格

将第一行写回文件,然后添加剩余内容。这对于具有1000行的文件来说并不理想,但它仍然可以工作。

答案 1 :(得分:0)

如果您想按列位置选择它们:

Import-Csv .\test.csv | select -Property ($_.psobject.properties.name)[0,1,2]

答案 2 :(得分:0)

只需添加CSV文件中显示的空格即可。

Import-Csv .\test.csv | select -Property "A X", "B Y ", "C Z "

有关PowerShell的有趣之处在于,如果它的变量在名称中有空格,它并不关心。在这种情况下,它完全是关于解析器并确保PowerShell知道您正在寻找什么。

New-Variable -Name "Variable 1" -Value "Value 1"
Get-Variable -Name "Variable 1" # Will return "Value 1"
${Variable 1} # Will return "Value 1"

$obj = New-Object PSObject -Property @{ "Some Property" = "Value" }
$obj.'Some Property' # Will return "Value"