2010-07-30 50 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" 

但是Import-Csv期望$ fileContents是一個路徑。我能否使用Content作爲源?

回答

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上就像Keith說的那樣。

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

現在文件中的無效標題只是一個可以跳過的行。

-Oisin