2017-01-10 6 views
0

Я пытаюсь прочитать и разделить 5 предметов в хэш-таблицу. Но я получаю только одну пару в хэш-таблице.Почему hashtable count = 1 и not = 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- * - тогда чтение содержимого обратно может быть проще. –

ответ

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 

Я также интегрировал предложение Ansgar в ваш другой раскол , положив \s* по обе стороны от :. Это поймает любые пробелы как часть разделителя и не включит их в ваши результирующие значения.

 Смежные вопросы

  • Нет связанных вопросов^_^