0

我有一个从机器自动生成的文本文件。机器将 txt 文件写入“块”(对不起,我不知道确切的术语)。我需要从这个 txt 文件中提取数据,但我需要先完成 txt 文件,然后才能从中提取数据。我找到了一个解决方案来验证机器是否已完成对文件的写入......它并不像我希望的那样优雅,但似乎可以解决问题。Excel VBA 打开一个命令提示符,命令提示符使用 Find 命令查找字符串“End of Report”...这基本上是 txt 文件的最后几行之一,可以假设 txt 文件在此之后完成被发现。此代码每 10 秒循环运行 1000 次,直到找到此字符串或达到 1000 次尝试...

问题是“结果”返回除了“报告结束”之外的一些其他字符,这使我也试图在一些 csv 文件上运行它的事实更加复杂......并且“结果”也返回一些额外的字符,但不同于从 txt 文件返回的那些。例如,如果我检查“结果”的长度......长度在一个文件上返回为 43,在另一个文件上返回为 48......我认为它正在计算文件路径+“报告结束”+更多人物?

无论如何,我真的不需要“结果”......如果“查找”找到“报告结束”,我真的只需要一个“真”/“假”......我怎么能做到这一点?有没有更好的方法来做到这一点?我不熟悉命令提示符编程。

注意:重要的是我搜索这些文件而不打开它们。

Sub test()

    Dim SearchStr As String
    Dim cmdLine As Object
    Dim result As String
    Dim FilePath As String

    FilePath = "D:\test2.txt"

    SearchStr = """End of Report"""

    Set cmdLine = CreateObject("WScript.Shell")
    result = cmdLine.Exec("%comspec% /C Find " & SearchStr & " " & Chr(34) & FilePath & Chr(34)).STDOut.ReadAll

    Debug.Print (result)

End Sub
4

1 回答 1

1

我并不是真正的命令行专家,但我要做的是将 FIND 命令的结果导出到文件中,就像这里

然后我会在您的 VBA 代码中检查文件中有多少行(之前清理文件,或者在导出完成之前检查行数)。

如果行数符合条件(可能是 2 行或更多行而不是 1 行),则可以将标志设置为 True。

于 2020-03-11T14:20:05.243 回答