Поиск текстовых и CSV-файлов для строки с помощью Excel VBA без открытия файлов - PullRequest
0 голосов
/ 11 марта 2020

У меня есть текстовый файл, который автоматически генерируется с компьютера. Машина записывает текстовый файл в виде «кусков» (извините, я не знаю точной терминологии). Мне нужно извлечь данные из этого 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

1 Ответ

0 голосов
/ 11 марта 2020

Я не очень разбираюсь в командной строке, но я бы экспортировал результат команды FIND в файл, например здесь

Тогда я бы проверил ваш VBA кодирует количество строк в файле (либо очистите файл до, либо проверьте количество строк перед выполнением экспорта).

Если количество строк соответствует критериям (вероятно, 2 или более строк вместо 1), тогда вы можете установить флаг в True.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...