【问题标题】:Constant Variable Re-defined?常量变量重新定义?
【发布时间】:2019-05-27 05:48:42
【问题描述】:

我正在使用 VBScript 根据模式挑选出 .txt 文件的某些部分,然后将其输出到另一个 .txt 文件中。 VBScript 是从批处理文件 (.BAT) 启动的,VBScript 创建名为 'proceed.txt' 的 .txt 文件的部分是为了让批处理文件知道 VBScript 何时完成,并可以继续。

我不断收到错误消息,指出第 13 行上的变量 ForWriting 已经定义,但我在代码中没有看到之前定义的任何地方。我试图完全消除 ForWriting 变量,并在 "hourextracted.txt" 部分之后放一个 2,但由于某种奇怪的原因,脚本非常不稳定。

另一个奇怪的事情是脚本确实有效。它工作正常。我不断收到错误消息,但脚本仍然可以正常工作,而且做得很好。我想要的只是让错误消息消失。我有几个与批处理文件中使用的脚本基本相同的其他脚本,即使代码相同,它们也可以正常工作而不会收到错误消息。但是,只有这一个会收到错误消息。

代码如下:

Const ForReading = 1
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("hour.txt", ForReading)
strSearchString = objFile.ReadAll
objFile.Close
Set objRegEx = CreateObject("VBScript.RegExp")
objRegEx.Global = True
objRegEx.Pattern = "\d{2}"
Set colMatches = objRegEx.Execute(strSearchString)  
If colMatches.Count > 0 Then
    For Each strMatch in colMatches
        Set obj = CreateObject("Scripting.FileSystemObject")
        Const ForWriting = 2
        Set obj1 = obj.OpenTextFile("hourextracted.txt", ForWriting)
        obj1.WriteLine(strMatch.Value)
        obj1.Close
        Set obj = Nothing 
        outFile = "proceed.txt"
        Set objFile = objFSO.CreateTextFile(outFile,True)
        objFile.Write "null" & vbCrLf
        objFile.Close
    Next
End If

【问题讨论】:

    标签: variables vbscript scripting numbers constants


    【解决方案1】:

    在 VBScript 中,常量在编译时在代码中被替换,但在到达 Const 语句之前不会发生声明(阅读 here)。

    如果您将Const 声明放在For 循环中,VBScript 引擎将尝试在每次迭代时声明该常量。

    因此,解决方案就是将常量声明置于For 循环之外。

    【讨论】:

    • 每当我这样做时,我都会停止收到错误,但是,脚本似乎只是中断了。它很少报告提取的号码,如果确实如此,那就是错误的号码。 . .我不确定为什么。但与此同时,这也可能是我的批处理文件的问题。
    • @EthanWaldeck,没有看到你的输入文件,不知道输出应该是什么,以及批处理文件做什么,几乎不可能确定什么不起作用以及为什么。请注意,您的代码尝试迭代一组匹配项,并且常量错误使代码仅输出第一个匹配项。如果没有错误,它将输出最后一个匹配项。
    • @EthanWaldeck 在循环中声明了常量并不能解决这个问题,它只会引入另一个问题。如果您更详细地描述您正在尝试完成的事情以及到目前为止您已经尝试过的事情,而不是专注于常量声明,那么您可能会得到更好的答案。当您专注于常量声明时,这个答案已经回答了这个问题。
    猜你喜欢
    • 1970-01-01
    • 2012-12-06
    • 2015-05-20
    • 2020-04-04
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    相关资源
    最近更新 更多