【问题标题】:Search txt and csv files for string using Excel VBA without opening files使用 Excel VBA 在 txt 和 csv 文件中搜索字符串而不打开文件
【发布时间】:2020-03-11 13:43:50
【问题描述】:

我有一个从机器自动生成的文本文件。机器将 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

【问题讨论】:

  • 真的吗?没人吗?
  • bump...任何建议将不胜感激...

标签: excel vba find command-prompt wscript.shell


【解决方案1】:

我并不是真正的命令行专家,但我会做的是将 FIND 命令的结果导出到文件中,例如 here

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

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

【讨论】:

  • 我偶然发现了一个“errorlevel”命令,它在“find”命令成功/失败时返回 0 / 1……我能以某种方式使用它吗?有时间弄清楚如何使用它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-20
  • 1970-01-01
  • 2021-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多