Como substituir textos em um arquivo antes de importá-lo para o Access

Compartilhe agora:

Como parte de nossa série contínua de artigos que abordam a importação de dados para o MS Access, abordaremos outro aspecto comum de preparar um arquivo para ser importado - ou seja, o que você faz quando tem arquivos para importar com linhas de cabeçalho ou rodapés com números de página neles? Novamente, por mais comum que seja, o MS Access não possui um método integrado para lidar com esses arquivos, portanto, tradicionalmente, você precisa usar ferramentas de processamento de texto como o Monarch Pro para pré-processar os arquivos antes de importá-los. Mas e se você não tiver acesso a essas ferramentas? Ou não quer a complicação adicional de manter outro pacote de software? Neste artigo, mostraremos como, usando um pouco de VBA, você pode remover esses tipos de linhas do arquivo antes de start sua importação.

Um exemplo – remover rodapés ou cabeçalhos de página antes de importar seu arquivo

Importe seu arquivo para o AccessPara este artigo, usaremos uma situação muito comum para nosso exemplo – ou seja, temos um arquivo que contém o texto do rodapé com o número da página. Naturalmente, não queremos tentar importar essas linhas para nossa tabela, pois não estará no formato correto; portanto, o que precisamos fazer é remover todas essas linhas do arquivo antes de importá-lo. Antes de começarmos a montar a solução, lembre-se sempre de que mesmo as melhores intenções para a limpeza de dados podem causar problemas se o arquivo que você está importando tiver problemas importantes que você não conhece - os resultados da importação de um arquivo danificado ou formatado incorretamente pode potencialmente arquivo de acesso corrompido – então reserve um tempo para se certificar de que você sabe o que precisa ser limpo de qualquer arquivo que você está importando antes de começar!

A abordagem

Como vamos fazer isso é bem direto. Primeiro, vamos ler o arquivo inteiro em uma string, depois dividiremos essa string em uma matriz que podemos percorrer e, finalmente, faremos um loop sobre essa matriz, linha por linha, e escreveremos qualquer linha exceto aqueles que correspondem ao padrão que estamos procurando de volta para um arquivo. O código abaixo permitirá que você crie um novo arquivo limpo ou substitua o arquivo existente passando o mesmo nome de arquivo para os parâmetros fileIn e fileOut.

O código

Sub CleanFile(fileIn As String, fileOut As String, removePattern As String, Optional positionOfText As String = "anywhere") Dim fs As Variant Dim filObj As Variant Dim fileString As String Dim fileArray As Variant Dim doWrite As Boolean 'abre o arquivo para leitura Set fs = CreateObject("Scripting.FileSystemObject") Set filObj = fs.OpenTextFile(fileIn, 1) 'ler o arquivo inteiro de uma vez fileString = filObj.readall 'e dividir em um array fileArray = Split(fileString, vbNewLine) filObj .Close 'cria nosso arquivo de saída - sobrescreve se já existir Set filObj = fs.CreateTextFile(fileOut, True) For Each ln In fileArray doWrite = False 'somente imprime a linha se NÃO contiver a string que estamos procurando Select Caso UCase(posiçãoDeTexto) Caso "START" If Left(Trim(ln), Len(removePattern)) <> removePattern Then doWrite = True Case "END" If Right(Trim(ln), Len(removePattern)) <> removePattern Then doWrite = True Case "ANYWHERE" If InStr(ln, removePattern) = 0 Then doWrite = True Case Else MsgBox "Parâmetro inválido fornecido - as opções válidas são: START, END ou ANYWHERE", vbExclamation, "Parâmetro incorreto fornecido" End Select If doWrite Then filObj.writeline ln Next End Sub

Explicando o código

Código VBAPara que possamos usar o código em muitas situações diferentes, adicionamos uma opção para dizer onde na linha que você está procurando por texto - ou seja, o final da linha (a data em que um relatório é executado é frequentemente encontrada lá, por exemplo), o start da linha (que pode ser, por exemplo, o nome do relatório ou o número da página) ou em qualquer lugar da linha. A seção "Select Case" do código verifica a posição relevante e, se o texto que estamos procurando não existir, a linha não será gravada no novo arquivo.

Usando o código

Voltando ao nosso exemplo, digamos que cada página do relatório/arquivo que queremos importar tenha um rodapé que diga:

Página 1 de 30

O que precisamos fazer aqui é quando estamos percorrendo as linhas individuais em nossa matriz de código, obviamente precisamos ignorar todas as linhas que sãotart com “Página” – pode ou não haver espaços no start da linha, mas eles são removidos usando a função Trim() no código.

Para remover essas linhas do nosso arquivo, simplesmente usaríamos o seguinte comando:

CleanFile(“H:\Input.txt”, “H:\Output.txt”, “Página”, “START”)

Uma vez executado, o arquivo Output.txt conteria todas as linhas exceto os rodapés da página – que é exatamente o que queremos.

Introdução do autor:

Mitchell Pond é um especialista em recuperação de dados em DataNumen, Inc., líder mundial em tecnologias de recuperação de dados, incluindo reparar SQL Server db e produtos de software de recuperação do Excel. Para mais informações visite www.datanumen.com

Compartilhe agora:

Deixe um comentário

O seu endereço de e-mail não será publicado. Os campos obrigatórios são marcados com *