2013-10-29 109 views
2

我有一個帶有標題行的csv文件,我想將其轉換爲散列表。帶有標題的Powershell CSV散列表

例如,這是我的輸入:

#Version1.0 
#Fields:ID,Data 
1,data1 
2,data2 
3,data3 

我想要的輸出是一個哈希表,其中密鑰= ID和值=數據。

這是我的,但結果不是我想要的。

$mytable = Import-Csv -Path $filePath -Header ID,Data 
[email protected]{} 
foreach($r in $mytable) 
{ 
    $HashTable[$r.ID]=$r.Data 
} 

這造成我的表,但是當我將它輸出後通過 $海峽= $哈希表|輸出字符串 寫主機$ STR

,我發現了以下內容:

Name     Value 
--------    ----------- 
#Fields:ID   Data 
1      data1 
2      data2 
3      data3 

如何擺脫頭被寫入我的哈希表?有沒有比堅持更優雅的解決方案if($ r.ID.StartsWith(「#」)){continue; }?

謝謝! -C

回答

0

不知道這是否是 「更優雅」,但是:

$mytable = Import-Csv -Path $filePath -Header ID,Data 
[email protected]{} 
foreach($r in $mytable) 
{ 
    if ($r.ID -notlike '#*') 
    {$HashTable[$r.ID]=$r.Data} 
} 
0

你可以試試這個:

Get-Content $filePath | where {$_ -notmatch '^#'} | ConvertFrom-Csv -Header ID,Data 

它刪除與#begining的所有行,然後readingg前作爲CSV行。

+0

我認爲,但它不會讓你一個哈希表。 – mjolinor

+0

你是對的,但之後@Charlie可以使用他的代碼。 – JPBlanc

0

只需要使用2號線爲您的標題:

ipcsv .\test.csv | % { $o = @{}} { $o[$_."#Fields:ID"] = $_.Data } {$o}

3

進口-CSV的默認行爲是使用第一(取消註釋)行頭。不要在命令中定義標題,而是從標題行中刪除「#Fields:」。

#Version1.0 
ID,Data 
1,data1 
2,data2 
3,data3 

然後,您可以創建這樣的哈希表:

$mytable = Import-Csv -Path $filePath 
[email protected]{} 
foreach($r in $mytable) 
{ 
    $HashTable[$r.ID]=$r.Data 
} 

將返回:

Name       Value 
----       ----- 
2        data2 
1        data1 
3        data3 
1

只需指定一個分隔符。 你的情況:

$ MYTABLE =進口-CSV -Path $文件路徑-Delimiter 「」

-2
$HashTable = @{} 
Import-Csv $filePath | % { $HashTable[$_.ID] = $_.Data }