В рамках нашей продолжающейся серии статей, посвященных импорту данных в MS Access, мы рассмотрим еще один распространенный аспект подготовки файла к импорту, а именно, что вы делаете, когда у вас есть файлы для импорта, которые имеют строки заголовков или нижних колонтитулов. с номерами страниц на них? Опять же, как бы часто это ни было, MS Access не имеет встроенного метода для обработки этих файлов, поэтому традиционно вам приходится использовать инструменты обработки текста, такие как Monarch Pro, для предварительной обработки файлов перед их импортом. Но что, если у вас нет доступа к этим инструментам? Или не хотите дополнительных сложностей, связанных с поддержкой еще одного программного пакета? В этой статье мы покажем вам, как, используя немного VBA, вы можете удалить эти типы строк из файла, прежде чемtarт ваш импорт.
Пример — удаление нижних колонтитулов или верхних колонтитулов перед импортом файла.
В этой статье мы будем использовать очень распространенную ситуацию для нашего примера, а именно, у нас есть файл, содержащий текст нижнего колонтитула с номером страницы. Естественно, мы не хотим пытаться импортировать эти строки в нашу таблицу, так как они будут в неправильном формате, поэтому нам нужно удалить все эти строки из файла перед его импортом. Прежде чем мы приступим к сбору решения, всегда имейте в виду, что даже самые лучшие намерения по очистке данных могут потенциально вызвать проблемы, если в импортируемом файле есть какие-либо серьезные проблемы, о которых вы не знаете — результаты импорта поврежденный или неправильно отформатированный файл может даже потенциально поврежденный файл доступа – так что не торопитесь, чтобы убедиться, что вы знаете, что нужно очистить от любого файла, который вы импортируете, прежде чем начать!
Подход
Как мы собираемся это сделать, довольно просто. Сначала мы прочитаем весь файл в строку, затем мы разделим эту строку на массив, который мы можем перебрать в цикле, и, наконец, мы пройдемся по этому массиву, строка за строкой, и напишем любую строку. кроме те, которые соответствуют шаблону, который мы ищем, возвращаются в файл. Приведенный ниже код позволит вам либо создать новый очищенный файл, либо перезаписать существующий файл, передав одно и то же имя файла для параметров fileIn и fileOut.
Код
Sub CleanFile(fileIn As String, fileOut As String, removePattern As String, Необязательно positionOfText As String = "anywhere") Dim fs As Variant Dim filObj As Variant Dim fileString As String Dim fileArray As Variant Dim doWrite As Boolean 'открыть файл для чтения Set fs = CreateObject("Scripting.FileSystemObject") Set filObj = fs.OpenTextFile(fileIn, 1) 'прочитать весь файл за один раз fileString = filObj.readall 'и разбить на массив fileArray = Split(fileString, vbNewLine) filObj .Close 'создать наш выходной файл - перезаписать, если он уже существует Set filObj = fs.CreateTextFile(fileOut, True) For Each ln In fileArray doWrite = False 'вывести только строку, если она НЕ содержит строку, которую мы ищем Select Случай UCase(positionOfText) Случай "START" If Left(Trim(ln), Len(removePattern)) <> removePattern Then doWrite = True Case "END" If Right(Trim(ln), Len(removePattern)) <> removePattern Then doWrite = True Case "ВЕЗДЕ" If InStr(ln, removePattern) = 0 Then doWrite = True Case Else MsgBox "Указан недопустимый параметр. Возможные варианты: START, END или ANYWHERE", vbExclamation, "Указан неверный параметр" End Select If doWrite Then filObj.writeline ln Next End Sub
Объяснение кода
Чтобы мы могли использовать код во многих различных ситуациях, мы добавили возможность сказать в котором в строке, которую вы ищете, т. е. в конце строки (например, там часто находится дата запуска отчета), start строки (которая, например, может быть именем отчета или номером страницы) или в любом месте строки. Раздел кода «Select Case» проверяет соответствующую позицию, и если искомый текст не существует, то строка не будет записана в новый файл.
Используя код
Возвращаясь к нашему примеру, предположим, что каждая страница отчета/файла, который мы хотим импортировать, имеет нижний колонтитул, который гласит:
Страница 1
Что нам нужно сделать здесь, так это то, что когда мы перебираем отдельные строки в нашем массиве кода, нам, очевидно, нужно игнорировать все строки, которые start со «Страницей» — могут быть или не быть пробелы в start строки, но они удаляются с помощью функции Trim() в коде.
Чтобы удалить эти строки из нашего файла, мы просто использовали бы следующую команду:
CleanFile("H:\Input.txt", "H:\Output.txt", "Страница ", "STARТ»)
После запуска файл Output.txt будет содержать все строки кроме нижние колонтитулы страницы — это именно то, что нам нужно.
Об авторе:
Митчелл Понд — эксперт по восстановлению данных в DataNumen, Inc., которая является мировым лидером в области технологий восстановления данных, включая ремонт SQL Server db и программные продукты для восстановления Excel. Для получения дополнительной информации посетите www.datanumen.com
Оставьте комментарий