2017-01-10 84 views
0

我想讀取和拆分5項哈希表。 但我只在散列表中得到一對。爲什麼hashtable count = 1而不是= 5?

[email protected]{} 
@" 
c : A P L 
R : 6h 
H : HN-56-78 
L : binary 
E : [email protected] 
"@ | %{ $v,$k = $_ -replace ' ' -split ':' ; $h.Add($v,$k) } 
$h.Count 
+0

只是雙重檢查...你打算從文件中讀取該輸入?還是你在用直接聲明預初始化哈希表的語法掙扎? '$ h = @ {「c」=「A P L」; 「R」=「6h」,,,}} –

+0

輸入將從文件中讀取。 – xaccor

+0

如果您正在從PowerShell編寫文件,請考慮使用其中一個Export- * cmdlet - 然後重新讀取內容可能會更簡單。 –

回答

3

你的字符串被管道輸送到ForEach-Object%)整個字符串。你的代碼中沒有任何部分將它分解成行,所以不會逐行處理。因此,你得到一個數據結構是這樣的:

{ 
    'c': [ "APL`nR", "6h`nH", "HN-56-78`nL", "binary`nE", "[email protected]" ] 
}

拆分串入行的冒號分割每行,以避免在此之前:

[email protected]{} 
@" 
c : A P L 
R : 6h 
H : HN-56-78 
L : binary 
E : [email protected] 
"@ -split "\r?\n" | %{ $v,$k = $_ -replace ' ' -split '\s*:\s*' ; $h.Add($v,$k) } 
$h.Count 

我還集成安斯加爾的建議到您的其他分裂,在:的兩側放置\s*。這將捕獲任何和所有空白作爲分隔符的一部分,並且不會將其包含在您的結果值中。

相關問題