我习惯用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 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
}
答案 0 :(得分:1)
PowerShell(和.NET)数组是固定大小的,因此分配给数组边界之外的元素不会增加数组。相反,让PowerShell为您构建阵列。以下将产生你想要的(btw数组,而不是实际的2-d数组)
$result = get-content data.txt | foreach { , ($_ -split ',')}
在此代码中,读取数据将为您提供行,拆分行将为您提供列。诀窍是拆分操作前的逗号。没有它,所有元素都将流式传输到单个平面阵列中。逗号保留嵌套数组,以便获得所需的数组数组。
答案 1 :(得分:0)
由于您的文件以逗号分隔(它是带有.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