Question:
I’m using PowerShell To import a TAB separated file with headers. The generated file has a few empty strings “” on the end of first line of headers. PowerShell fails with an error:
“Cannot process argument because the
value of argument “name” is invalid.
Change the value of the “name”
argument and run the operation again”
because the header’s require a name.
I’m wondering if anyone has any ideas on how to manipulate the file to either remove the double quotes or enumerate them with a “1” “2” “3” … “10” etc.
Ideally I would like to not modify my original file. I was thinking something like this
1 2 3 4 5 |
$fileContents = Get-Content -Path = $tsvFileName $firstLine = $fileContents[0].ToString().Replace('`t""',"") $fileContents[0] = $firstLine Import-Csv $fileContents -Delimiter "`t" |
But Import-Csv is expecting $fileContents to be a path. Can I get it to use Content as a source?
Answer:
I ended up needing to handle multiple instances of this issue. Rather than use the -Header and manually setting up each import instance I wrote a more generic method to apply to all of them. I cull out all of the `t”” instances of the first line and save the file to open as a $filename + _bak and import that one.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$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" |