用于循环抛掷"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]这是一个有效的索引,应该返回$true并继续循环。我错过了什么吗?

for循环的语法是错误的。for循环使用分号作为分隔符。

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

应该是

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

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

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

相关内容

最新更新