用于循环抛出的 Powershell "the array index evaluated to null"

Powershell for loop throwing "the array index evaluated to null"

首先,我在 Fedora 30 上使用 PSCore 版本 6.2.1。我在 GNOME 终端和 vscode 快照中遇到过这个问题。

我正在接受 PSKoans 模块的第一次挑战,但在尝试使用 for 循环时遇到了困难。我得到一个字符串数组,每个字符串都是用逗号分隔的字符串集合。

$StockData = @(
    "Date,Open,High,Low,Close,Volume,Adj Close"
    "2012-03-30,32.40,32.41,32.04,32.26,31749400,32.26"
    "2012-03-29,32.06,32.19,31.81,32.12,37038500,32.12"
) # The array is much longer than that, but shortened for simplicity's sake

因此,我的想法是通过使用数组中的第一个字符串作为键,使用每个后续行作为一组值,从数组中的每个后续字符串行构建一个哈希表。我正在使用 -split 将字符串中的值分开。我想使用 for 循环遍历数组并提取值,在文件中构建一个 hastable 以便稍后读取,如下所示:

# Build the array of keys
[array]$keys = $StockData[0] -split ','
# Begin for loop, using $i as int
for ($i = 1, $StockData[$i], $i++) {
    # Create a text file for each hastable
    New-Item -Name "ht$i.txt" -ItemType File
    # Split current string into values
    $values = $StockData[$i] -split ','
    # Set value int
    $valuesInt = 0
    foreach ($key in $keys) {
        Add-Content -Path "./ht$i.txt" -Value "$key = $values[$valuesInt]"
        $valuesInt++
    }
}

正如我 运行 那样,我收到以下错误:

Index operation failed; the array index evaluated to null.
At /home/user/PSKoans/Foundations/SolutionStockChallenge.ps1:28 char:6
+ for ($i = 1, $stockData[$i], $i++) {
+      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArrayIndex

我查了一下,发现人们收到此错误消息的各种情况。我没有真正找到可能导致我找到答案的错误消息的可靠解释。

阅读错误信息,我觉得没有意义。 the array index evaluated to null...但第一种情况下的数组索引是 $StockData[1],这是一个有效索引,应该 return $true 并继续循环。我错过了什么吗?

ConvertFrom-Json PowerShell Core 中有最酷的开关——AsHashTable。试试这个:

$StockData | convertfrom-csv | convertto-json | ConvertFrom-Json -AsHashtable

你的 for 循环的语法是错误的。 for 循环使用 semi-colons 作为分隔符。

for ($i = 1, $StockData[$i], $i++) {

应该是

for ($i = 1; $StockData[$i]; $i++) {