У меня есть текстовый файл, который автоматически генерируется с компьютера. Машина записывает текстовый файл в виде «кусков» (извините, я не знаю точной терминологии). Мне нужно извлечь данные из этого TXT-файла, но мне нужно завершить TXT-файл перед извлечением данных из него. Я нашел решение, чтобы проверить, что машина закончила запись в файл ... Это не так элегантно, как я надеялся, но, похоже, сработало. Excel VBA открывает командную строку, командная строка использует команду Find для поиска строки «Конец отчета» ... Это в основном одна из последних строк txt-файла, и довольно безопасно предположить, что txt-файл закончен после этого найден. Этот код запускается в al oop 1000 раз каждые 10 секунд, пока не найдет эту строку или не достигнет 1000 попыток ...
Проблема заключается в том, что «result» возвращает некоторые другие символы, кроме «Конца отчета» «Это еще более усложняется тем, что я пытаюсь запустить это также на некоторых CSV-файлах ... и« результат »также возвращает некоторые дополнительные символы, но отличается от тех, которые возвращаются из 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