2010-07-30 5 views
4

Я использую PowerShell. Чтобы импортировать файл с разделяемым TAB с заголовками. Сгенерированный файл имеет несколько пустых строк «» в конце первой строки заголовков. PowerShell выходит из строя с ошибкой:Powershell import-csv с пустыми заголовками

"Cannot process argument because the value of argument "name" is invalid. Change the value of the "name" argument and run the operation again"

потому что для заголовка требуется имя.

Я интересно, если кто имеет какие-либо идеи о том, как манипулировать файл или удалить двойные кавычки или перечислить их с «1» «2» «3» ... «10» и т.д.

В идеале я бы не хотел изменять мой исходный файл. Я думал, что-то вроде этого

$fileContents = Get-Content -Path = $tsvFileName 
$firstLine = $fileContents[0].ToString().Replace('`t""',"") 
$fileContents[0] = $firstLine 
Import-Csv $fileContents -Delimiter "`t" 

Но Импорт-Csv ожидает $ fileContents быть путь. Могу ли я использовать его в качестве источника?

ответ

3

Я в конечном итоге необходимости обрабатывать несколько экземпляров этого вопроса. Вместо того, чтобы использовать -Header и вручную настраивать каждый экземпляр импорта, я написал более общий метод, применимый ко всем им. Я вычеркиваю все экземпляры «t» первой строки и сохраняю файл открытым как $ filename + _bak и импортирую его.

$fileContents = Get-Content -Path $tsvFileName 

if(([string]$fileContents[0]).ToString().Contains('""')) 
{ 
    [string]$fixedFirstLine = $fileContents[0].ToString().Replace('`t""',"") 
    $fileContents[0] = $fixedFirstLine 
    $tsvFileName = [string]::Format("{0}_bak",$tsvFileName 

    $fileContents | Out-File -FilePath $tsvFileName 

} 

Import-Csv $tsvFileName -Delimiter "`t" 
3

Если вы хотите работать со строками, а не использовать ConvertFrom-Csv например:

PS> 'FName,LName','John,Doe','Jane,Doe' | ConvertFrom-Csv | Format-Table -Auto 

FName LName 
----- ----- 
John Doe 
Jane Doe 
11

Вы можете предоставить свои собственные заголовки и игнорировать первую строку CSV, или вы можете использовать ConvertFrom-CSV на конец, как говорит Кейт.

ps> import-csv -Header a,b,c,d,e foo.csv 

Теперь недопустимые заголовки в файле - это просто строка, которую вы можете пропустить.

-Oisin

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