我正在使用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成为路径。我可以使用内容作为来源吗?
答案 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