2010-07-30 9 views
4

J'utilise PowerShell Pour importer un fichier séparé TAB avec des en-têtes. Le fichier généré contient quelques chaînes vides "" à la fin de la première ligne des en-têtes. Échec de PowerShell avec une erreur:Powershell import-csv avec des en-têtes vides

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

car les en-têtes requièrent un nom.

Je me demande si quelqu'un a des idées sur la façon de manipuler le fichier soit supprimer les guillemets doubles ou les énumérer avec un « 1 » « 2 » « 3 » ... « 10 », etc.

Idéalement je ne voudrais pas modifier mon fichier original. Je pensais quelque chose comme ça

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

Mais Import-Csv attend fileContents $ pour être un chemin. Puis-je l'utiliser pour utiliser le contenu comme source?

Répondre

3

J'ai fini par avoir besoin de gérer plusieurs instances de ce problème. Plutôt que d'utiliser le -Header et de configurer manuellement chaque instance d'importation, j'ai écrit une méthode plus générique à appliquer à chacun d'entre eux. Je ramasse toutes les instances `t" de la première ligne et enregistre le fichier à ouvrir en tant que $ filename + _bak et j'importe celui-ci.

$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

Si vous voulez travailler avec des chaînes au lieu d'utiliser ConvertFrom-csv par exemple:

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

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

Vous pouvez fournir vos propres têtes et ignorer la première ligne du csv, ou vous pouvez utiliser ConvertFrom-csv sur le fin comme Keith dit. Maintenant, les en-têtes non valides dans le fichier sont juste une ligne que vous pouvez ignorer.

-Oisin

Questions connexes