2015-04-16 7 views
0

У меня есть файлы CSV. Ниже приведен пример. Обратите внимание, что в заголовках столбцов B Y и C Z имеются конечные пробелы.CSV колонка с задним пространством?

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

Следующий скрипт возвращает пустые значения для B Y и C Z.

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

Это способ вернуть значения, даже если в заголовках столбцов есть конечные пробелы?

ответ

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 строк, но он все равно будет работать.

+0

Не нужно использовать звездочки. Просто добавьте пробел. –

+0

@NewGuy ему нужна звездочка в случае, если места там нет. Дело не всегда в этом. – Matt

0

Если вы хотите, чтобы выбрать их положение колонки:

Import-Csv .\test.csv | select -Property ($_.psobject.properties.name)[0,1,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" 
+0

Оператор говорит, что в заголовках столбцов есть конечные пробелы, а это значит, что они не могут быть там. – Matt

Смежные вопросы