使用Excel VBA在不打开文件的情况下搜索txt和csv文件中的字符串



我有一个从机器自动生成的文本文件。机器以"块"的形式写入txt文件(对不起,我不知道确切的术语(。我需要从这个txt文件中提取数据,但我需要在从中提取数据之前完成txt文件。我找到了一个解决方案来验证机器是否已经完成了对文件的写入。。。它并不像我希望的那样优雅,但似乎起到了作用。Excel VBA打开命令提示符,命令提示符使用"查找"命令查找字符串"报告结束"。。。这基本上是txt文件的最后一行,可以很安全地假设txt文件在找到它之后就完成了。这个代码每10秒循环运行1000次,直到找到这个字符串或达到1000次尝试。。。

问题是,"result"除了返回"End of Report"之外,还返回了一些其他字符。由于我也试图在一些csv文件上运行此操作,这一情况变得更加复杂。。。"result"还返回一些额外的字符,但与从txt文件返回的字符不同。例如,如果我检查"结果"的长度。。。一个文件的长度为43,另一个文件为48。。。我想是在计算文件路径+"报告结束"+几个字符?

无论如何,我真的不需要"结果"。。。我真的只需要一个"true"/"false",如果"Find"找到了"End of Report"或没有。。。我怎样才能做到这一点?有其他更好的方法吗?我不熟悉命令提示符编程。

注意:在不打开这些文件的情况下搜索这些文件是很重要的。

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

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

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

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

最新更新