【问题标题】:Avoid "Cannot index into null array." on for loop comparison避免“无法索引到空数组”。在 for 循环比较
【发布时间】:2014-06-25 13:18:41
【问题描述】:

我有一个 for 循环偶尔会生成错误“无法索引到空数组”。

这是我用来处理 EDI 文件的一段代码。代码按预期运行,因为错误是在我不感兴趣的文件段上生成的。
这个特定的循环负责提前读取以识别感兴趣的元素。问题是它正在通过锯齿状数组读取。第一个索引表示 EDI 文件的一行,第二个索引表示该行的元素。元素的索引 0 将始终存在 3 有时可能是空索引,因为有时一行中只有 3 个元素。我不能强制使用第 4 (3)个索引,因为这会改变结果文件,在不应该存在的地方添加一个空元素。我似乎找不到进行比较的方法,$FileElements[$i2][3] -eq '20',跳过空索引并返回 false。

For ($i2=$i1+1; !($FileElements[$i2][0] -eq 'HL' -and $FileElements[$i2][3] -eq '20'); $i2++){

有没有更好的处理方法?似乎它应该认识到它是 null 并返回 false 而不是错误。

【问题讨论】:

  • 我无法重现您的错误。您确定您的“无法索引到空数组”不是由 $i2 大于文件中的行数引起的吗?
  • 你是个天才……或者至少擅长指出我眼皮底下的东西。错误在文件中间,所以我没有考虑文件的结尾。添加一个新的 If 语句和一个 break 已经解决了这个问题。
  • ...但是除非您将评论作为答案,否则我无法标记您的答案。
  • 完成。我当然不是天才。您使用的是 Powershell ISE 吗?它具有调试功能,它让我找到了问题所在。
  • 暂时没有,但我可能会试一试。

标签: arrays powershell for-loop


【解决方案1】:

我无法准确重现您的错误,但我确实注意到当 $i2 超过外部数组的长度(即文件中的行数)时我得到了同样的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-02
    • 2021-06-13
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    相关资源
    最近更新 更多