AtEndOfStream 循环中的 VBScript 错误 9

VBScript Error 9 in AtEndOfStream Loop

我正在使用这样的脚本循环访问文本文件中的一些数据:

Do Until objFile.AtEndOfStream
    'Check if it is not a blank line; otherwise skip it
    If Len(Trim(objFile.ReadLine)) > 0 Then
        'Some code
    end if
Loop

我每次都打印出这些值,它一直打印到文件末尾(我可以看到它打印了每个值)但是当它到达末尾时总是出错。我使用 on error resume next 并打印出 Err.Number,我得到错误编号 9,即 Subscript out of range

我循环访问的文件的问题是最后一行是空白。我知道这一点是因为我打开了文件,删除了最后的空白行,然后 运行 代码,它工作正常。不过,这是一个自动化过程(文件每天都会通过自动化任务自动发送到 FTP 和进程 运行),所以我无法进入并手动摆脱最后一个每天排队。我包括了 If Len(Trim(objFile.ReadLine)) > 0 Then 来考虑这个空行,它在有数据的行上工作正常,但它仍然在文件末尾抛出错误。

当它到达一个空行时,我可以让循环结束,但我想在其中保留一个条件,以防由于某种原因在代码中间出现一个空行。我想弄清楚它是否真的是文件的最后一行然后结束循环会更清晰。

有什么想法吗?感谢您的帮助!

首先,我想问您您如何实际处理您读入的那一行,因为您没有将它存储在任何地方。您阅读它并将其传递给 Trim() 进行检查,但之后无法到达该行。

如果您在循环中还有 另一个 ReadLine(认为那将是同一行),那将是一个问题,因为您可能正在阅读"blank" 行 if 语句中。这也意味着你每隔一行就扔掉一次。

在我看来你应该使用类似的东西:

Do Until objFile.AtEndOfStream
    thisLine = objFile.ReadLine
    If Len(Trim(thisLine)) > 0 Then
        ' Some code using thisLine, NOT another ReadLine.
    End If
Loop

另一件事(一旦该问题得到澄清),您确定最后一行仅包含 spaces 吗? 我认为就这些 trim()摆脱。可能是里面有other white space给你造成了问题,比如TAB

找出问题的一种方法是复制一份有问题的文件,然后删除除最后几行以外的所有内容。然后您可以在代码中插入调试语句以查看发生了什么:

Do Until objFile.AtEndOfStream
    thisLine = objFile.ReadLine

    trimLine = Trim(thisLine)
    MsgBox ("[" & trimLine & "] " & CStr(Len(trimLine))

    If Len(Trim(thisLine)) > 0 Then
        MsgBox ("Processing it...")

        ' Some code using thisLine, NOT another ReadLine.
    End If
Loop