带有空标题的Powershell import-csv

时间:2010-07-30 15:55:08

标签: powershell csv

我正在使用PowerShell导入带有标题的TAB分隔文件。生成的文件在第一行标题的末尾有一些空字符串“”。 PowerShell失败并显示错误:

  

“无法处理参数,因为   参数“name”的值无效。   更改“名称”的值   参数并再次运行“

因为标题需要名称。

我想知道是否有人对如何操作文件以删除双引号或用“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成为路径。我可以使用内容作为来源吗?

4 个答案:

答案 0 :(得分:11)

您可以提供自己的标头并忽略csv的第一行,也可以像Keith一样使用convertfrom-csv。

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

现在文件中的无效标题只是您可以跳过的一行。

-Oisin

答案 1 :(得分:3)

如果您想使用字符串,请使用ConvertFrom-Csv,例如:

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

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

答案 2 :(得分: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 :(得分:0)

我的解决方案,如果您有很多列:

$index=0

$ColumnsName=(Get-Content "C:\temp\yourCSCFile.csv" | select -First 1) -split ";" | %{

$index++
"Header_{0:d5}" -f $index

}

import-csv "C:\temp\yourCSCFile.csvv" -Header $ColumnsName