2017-01-10 82 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*。这将捕获任何和所有空白作为分隔符的一部分,并且不会将其包含在您的结果值中。

相关问题