Powershell Добавление элементов из текстового файла в двухмерный массив - PullRequest
0 голосов
/ 25 мая 2018

Я привык к кодированию в Java, и я новичок в Powershell.У меня есть текстовый файл, который содержит информацию о сервере Windows, отображаемую следующим образом.

14.0.3026.27,None,CU7,4229789,SQL Server 2017,0

14.0.3025.34,None,CU6,4101464,SQL Server 2017,0

14.0.3023.8,None,CU5,4092643,SQL Server 2017,0

Я пытаюсь выбросить эту информацию в двумерный массив и хочу, чтобы она выглядела следующим образом.

[14.0.3026.27],[None],[CU7],[4229789],[SQL Server 2017],[0]

[14.0.3025.34],[None],[CU6],[4101464],[SQL Server 2017],[0]

[14.0.3023.8],[None],[CU5],[4092643],[SQL Server 2017],[0]

Код, который я имею, выдает это сообщение об ошибке:

Невозможно индексировать в нулевой массив.В строке: 9 символов: 9 + $ array [$ i] [$ j] = $ word + ~~~~~~~~~~~~~~~~~~~~~~~ CategoryInfo: InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId: NullArray

Вот мой код:

$file = Get-Content "C:\Users\UserName\Desktop\sqlServers.txt"
$array = @(), @()
$i = 0
$j = 0
foreach ($line in $file){    
    $j=0

    foreach ($word in $line.split(",")){
        $array[$i][$j] = $word
        $j+=1
    }
    $i+=1
}

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Поскольку ваш файл разделен запятыми (это CSV с расширением .txt), вместо этого вы можете использовать Import-Csv для создания массива.

Вам нужно будет вручную указывать заголовки, так как пример ввода не делает 't включить их.

Код с примерами заголовков:

$array = Import-Csv "C:\folder\sqlServers.txt" -Header Version,Something,CU,Number,Product,Another

Затем вы можете ссылаться на элементы по индексу и имени свойства:

PS > $array[0].CU
CU7

PS > $array[2].Product
SQL Server 2017
0 голосов
/ 25 мая 2018

Массивы PowerShell (и .NET) имеют фиксированный размер, поэтому при присваивании элементу за пределами массива массив не увеличивается.Вместо этого позвольте PowerShell создавать массивы для вас.Следующее будет производить то, что вы хотите (массив массивов между прочим, а не фактический двумерный массив)

$result = get-content data.txt | foreach { , ($_ -split ',')}

В этом коде чтение данных даст вам строки, а разделение строк даст вамколонны.Хитрость заключается в запятой перед операцией разбиения.Без него все элементы были бы вытянуты в один плоский массив.Запятая сохраняет вложенный массив, поэтому вы получаете желаемый массив массивов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...