bugfix> powershell > 投稿

私はJavaでのコーディングに慣れており、Powershellの初心者です。このように表示されるWindowsサーバー情報を含むテキストファイルがあります。

14.0.3026.27、なし、CU7、4229789、SQL Server 2017、014.0.3025.34、なし、CU6、4101464、SQL Server 2017、014.0.3023.8、なし、CU5,4092643、SQL Server 2017、0

この情報を2次元配列に投げ入れて、このように見せたいと思っています。

[14.0.3026.27]、[なし]、[CU7]、[4229789]、[SQL Server 2017]、[0][14.0.3025.34]、[なし]、[CU6]、[4101464]、[SQL Server 2017]、[0][14.0.3023.8]、[なし]、[CU5]、[4092643]、[SQL Server 2017]、[0]

私が持っているコードはこのエラーメッセージを与えています:

Cannot index into a null array. At line:9 char: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 件
  • PowerShell(および.NET)配列は固定サイズであるため、配列の境界を超えて要素に割り当てても配列は拡大しません。代わりに、PowerShellで配列を作成してください。以下はあなたが望むものを生成します(実際の2次元配列ではなく、配列btwの配列)

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

    このコードでは、データを読み取ると行が得られ、行を分割すると列が得られます。トリックは、分割操作の前のカンマです。これがないと、すべての要素が単一のフラット配列にストリーミングされます。コンマはネストされた配列を保持するため、目的の配列の配列を取得できます。

  • ファイルはカンマで区切られているため(拡張子が.txtのCSV)、代わりに Import-Csv を使用できます  配列を作成します。

    入力例にはヘッダーが含まれていないため、ヘッダーを手動で指定する必要があります。

    サンプルヘッダー付きのコード:

    $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
    
    

あなたの答え