【问题标题】:Opening Each File in a Loop循环打开每个文件
【发布时间】:2017-10-17 20:57:06
【问题描述】:

我正在编写一个需要从目录中的文件中提取文本的子例程。套路如下。只要目录中只有一个文件,它就可以工作。当有多个时,它会告诉我下面的Set intFSO = intFSO.OpenTextFile(filePath, 1) 行。

我认为我需要做一些事情来重置下一个文件,但我似乎无法弄清楚它是什么。有什么建议吗?

Sub ExtractEDI(folPath)
  Dim sName, fil
  Dim intFSO
  Dim filePath

  Set intFSO = CreateObject("Scripting.FileSystemObject")

  For Each fil In fso.GetFolder(folPath).Files
    filePath = folpath & "\" & fil.Name
    Set intFSO = intFSO.OpenTextFile(filePath, 1)

    'will process file here

    intFSO.Close
  Next
  Set intFSO = Nothing
End Sub

这个脚本还有更多内容。上面的例程被递归调用以遍历子目录。所有这些都运行良好。

【问题讨论】:

    标签: vbscript fso


    【解决方案1】:
    Set intFSO = intFSO.OpenTextFile(filePath, 1)
    '   ^^^^^^   ^^^^^^
    

    如果您打算在下一次迭代中再次使用它,请不要将您的 FileSystemObject 实例替换为文件句柄。为文件使用不同的变量。并删除整个路径连接/OpenTextFileshebang。您可以直接从File 对象打开文件。

    这就是你所需要的(假设fso 是一个全局FileSystemObject 实例):

    Sub ExtractEDI(folPath)
      For Each fil In fso.GetFolder(folPath).Files
        Set f = fil.OpenAsTextStream
    
        'will process file here
    
        f.Close
      Next
    End Sub
    

    【讨论】:

    • 这是有道理的。非常感谢。
    • @lankymart 我将第一个代码 sn-p 放在一个块引用中,以表明它是从问题中引用的(当然减去“下划线”)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多