我正在尝试阅读并将5项分成哈希表。 但我只在哈希表中得到一对。
$h=@{}
@"
c : A P L
R : 6h
H : HN-56-78
L : binary
E : m@a.com
"@ | %{ $v,$k = $_ -replace ' ' -split ':' ; $h.Add($v,$k) }
$h.Count
答案 0 :(得分:3)
您的字符串作为整个字符串被传送到ForEach-Object
(%
)。您的代码中没有任何部分将其拆分为行,因此不会逐行处理。因此,您将获得如下数据结构:
{ 'c': [ "APL`nR", "6h`nH", "HN-56-78`nL", "binary`nE", "m@a.com" ] }
在将每一行拆分为冒号之前将字符串拆分为行,以避免这种情况:
$h=@{}
@"
c : A P L
R : 6h
H : HN-56-78
L : binary
E : m@a.com
"@ -split "\r?\n" | %{ $v,$k = $_ -replace ' ' -split '\s*:\s*' ; $h.Add($v,$k) }
$h.Count
我还将Ansgar的建议整合到您的其他拆分中,将\s*
放在:
的任意一侧。这将作为分隔符的一部分捕获任何和所有空格,而不是将其包含在结果值中。