如何在PowerShell中切片二维数组?

问题描述 投票:0回答:2

我使用ADODB连接从数据库查询中获得二维数组。简而言之,在打开连接后,我通过以下方式检索记录集:

$rs2 = New-Object -ComObject ADODB.Recordset

$sql = "<some SELECT statement here>"

$rs2.Open($sql, $conn)

$rows = $rs2.GetRows(1000)

我想只查看特定列的前10行。所以,我试过了:

$rows[0,(0..9)]

但它成功地失败了:

You cannot index into a 2 dimensional array with index [0].
At line:1 char:1
+ $rows[0,(0..9)]
+ ~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : NeedMultidimensionalIndex

该阵列有1000行和200多列。我可以使用语法:

$rows[0,100]

没有问题。

我在这里错过了什么?

arrays powershell
2个回答
3
投票

索引运算符接受值列表,但如果您的数组的维度> 1,则列表必须是数组列表,以便每个单独的列表元素标识原始数组的一个元素。

$indexes = 0..9 | ForEach-Object { ,@(0, $_) }
$rows[$indexes]

,@(0, $_)中的主要逗号阻止PowerShell通过将数据包装在另一个展开的数组中来展开数组@(0, $_)

基本上,您需要构建一个标识要访问的数组元素的元组列表,然后将该列表与索引运算符一起使用。

$rows[0][0..9]不起作用,因为你有一个二维数组,而不是一个锯齿状数组(数组数组)。


0
投票

因为您正在使用ADODB.Recordset对象,所以您可以使用特定方法来访问数据。

要从第一行获取值,请按第一列:

$rows.GetValue(0,0)

第一行,第二列:

$rows.GetValue(1,0)

第二行,第六栏:

$rows.GetValue(5,1)

等等

© www.soinside.com 2019 - 2024. All rights reserved.