PowerShell拆分变量为动态多维数组时遇索引越界问题求助
问题:PowerShell多维数组拆分时出现“Index is out of boundaries.”错误
我尝试在PowerShell中将变量拆分为多维变量时,出现了“Index is out of boundaries.”错误。试过声明额外的$table()变量,但所有方法都失败了。我的需求是$tables变量需要接收动态输入(可以有不同数量的表名,用:分隔,表的坐标用,分隔),期望得到如下格式的输出:
$tables[0][0] = "tab_eposter" $tables[0][1] = "2" ... $tables[1][0] = "tab_befaring" ... $tables[1][2] = 3
以下是我的代码:
function Get-Txt-From-Excel { Param( [Parameter(Mandatory)] $inFile, [Parameter(Mandatory)] $outFile, $ranges = "info_ordre,info_adresse", $tables = "tab_eposter,2,2,1,3,3,2:tab_befaring,2,3", $sheet = "prosjekt-info", ) try{ # Internal variables $ranges = $ranges -split "," $tables = $tables -split ":" for( $i = 0; $i -le $tables.length; $i++ ) { $tmp_table = $tables[$i] -split "," $tables[$i] = $tmp_table } Write-Host $tables[0][0] throw ...
解决方案
错误原因
循环条件使用了$i -le $tables.length,但PowerShell数组的索引从0开始,$tables.length是数组的元素总数。比如拆分后$tables有2个元素,最大索引是1,当$i等于$tables.length(即2)时,访问$tables[$i]就会触发索引越界错误。
修改后的代码
推荐新建空数组存储拆分后的多维结构,同时用foreach遍历避免索引问题:
function Get-Txt-From-Excel { Param( [Parameter(Mandatory)] $inFile, [Parameter(Mandatory)] $outFile, $ranges = "info_ordre,info_adresse", $tables = "tab_eposter,2,2,1,3,3,2:tab_befaring,2,3", $sheet = "prosjekt-info" ) try{ # Internal variables $ranges = $ranges -split "," $splitTableStrs = $tables -split ":" $tables = @() # 初始化空数组用于存储多维结构 foreach ($tableStr in $splitTableStrs) { # 用逗号包裹拆分结果,确保添加的是子数组而非扁平化元素 $tables += ,($tableStr -split ",") } # 验证输出 Write-Host $tables[0][0] # 输出:tab_eposter Write-Host $tables[1][2] # 输出:3 # 后续业务逻辑... } catch { Write-Error $_.Exception.Message } }
关键注意点
- 循环边界修正:如果坚持使用
for循环,需将条件改为$i -lt $tables.length(小于而非小于等于),避免访问不存在的索引。 - 数组扁平化问题:PowerShell默认会把数组元素扁平化添加到另一个数组,用
,($subArray)的方式可以强制添加子数组,保留多维结构。
内容的提问来源于stack exchange,提问作者Slawowid
相关产品推荐
相关产品推荐

