Question:
I have a csv file with a header row and I want to convert it to a Hashtable.
For example, this is my input:
1 2 3 4 5 6 |
#Version1.0 #Fields:ID,Data 1,data1 2,data2 3,data3 |
I want the output to be a hashtable where Key=ID and Value =Data.
This is what I have, but the results aren’t quite what I want.
1 2 3 4 5 6 7 |
$mytable = Import-Csv -Path $filePath -Header ID,Data $HashTable=@{} foreach($r in $mytable) { $HashTable[$r.ID]=$r.Data } |
This creates my table, but when I output it later via
$str = $Hashtable | Out-String
Write-Host $str
I’m getting the following:
1 2 3 4 5 6 7 |
Name Value -------- ----------- #Fields:ID Data 1 data1 2 data2 3 data3 |
How do I get rid of the Headers being written to my hashtable? Is there a more elegant solution than sticking if ($r.ID.StartsWith(“#”)) { continue; }?
Thanks!
-C
Answer:
The default behavior in Import-Csv is to use the first (un-commented) line as the headers. Instead of defining the header in the command, remove “#Fields:” from the header line.
1 2 3 4 5 6 |
#Version1.0 ID,Data 1,data1 2,data2 3,data3 |
Then you can create the hashtable like this:
1 2 3 4 5 6 7 |
$mytable = Import-Csv -Path $filePath $HashTable=@{} foreach($r in $mytable) { $HashTable[$r.ID]=$r.Data } |
Which returns:
1 2 3 4 5 6 |
Name Value ---- ----- 2 data2 1 data1 3 data3 |