Hvordan erstatte tekster i en fil før du importerer den til Access

Som en del av vår pågående serie med artikler som dekker import av data til MS Access, skal vi dekke et annet vanlig aspekt ved å gjøre en fil klar til å importeres – nemlig hva gjør du når du har filer å importere som har topp- eller bunntekst med sidetall på? Igjen, så vanlig som dette er, har ikke MS Access en innebygd metode for å håndtere disse filene, så tradisjonelt sitter du igjen med å måtte bruke tekstbehandlingsverktøy som Monarch Pro for å forhåndsbehandle filene før du importerer dem. Men hva om du ikke har tilgang til disse verktøyene? Eller vil du ikke ha den ekstra komplikasjonen med å vedlikeholde enda en programvarepakke? I denne artikkelen skal vi vise deg hvordan du, ved å bruke litt VBA, kan fjerne den typen linjer fra filen før dutart din import.

Et eksempel – fjerning av sidebunntekster eller topptekster før du importerer filen

Importer filen din til tilgangFor denne artikkelen vil vi bruke en veldig vanlig situasjon for eksempelet vårt – nemlig vi har en fil som inneholder bunntekst som har sidenummeret på. Naturligvis ønsker vi ikke å prøve å importere disse linjene til tabellen vår, da den ikke vil være i riktig format, så det vi må gjøre er å fjerne alle linjene fra filen før vi importerer den. Før vi setter oss fast i å sette sammen løsningen, må du alltid huske på at selv de beste intensjonene for datarensing kan potensielt forårsake problemer hvis filen du importerer har noen store problemer du ikke er klar over – resultatene av å importere en skadet eller feilformatert fil kan til og med potensielt korrupt Access-fil – så ta deg tid til å sørge for at du vet hva som må renses fra alle filer du importerer før du begynner!

Tilnærmingen

Hvordan vi skal gjøre dette er ganske rett frem. Først skal vi lese hele filen inn i en streng, så deler vi den strengen i en matrise som vi kan sløyfe over, og til slutt vil vi løkke over den matrisen, linje for linje, og skrive hvilken som helst linje unntatt de som samsvarer med mønsteret vi søker etter, går tilbake til en fil. Koden nedenfor lar deg bruke enten opprette en ny renset fil, eller overskrive den eksisterende filen ved å sende samme filnavn for både fileIn og fileOut parametere.

Koden

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 'åpne filen for lesing Sett fs = CreateObject("Scripting.FileSystemObject") Sett filObj = fs.OpenTextFile(fileIn, 1) 'les hele filen på én gang fileString = filObj.readall 'og del opp i en array fileArray = Split(fileString, vbNewLine) filObj .Close 'opprett utdatafilen vår - overskriv hvis den allerede eksisterer Sett filObj = fs.CreateTextFile(fileOut, True) For Every ln In fileArray doWrite = False 'skriv bare ut linjen hvis den IKKE inneholder strengen vi leter etter Velg Sak UCase(positionOfText) Sak "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" Hvis InStr(ln, removePattern) = 0 Så doWrite = True Case Else MsgBox "Ugyldig parameter gitt - gyldige alternativer er: START, END, or ANYWHERE", vbUtrop, "Feil parameter gitt" End Select If doWrite Then filObj.writeline ln Next End Sub

Forklarer koden

VBA kodeFor at vi kan bruke koden i mange forskjellige situasjoner, har vi lagt til et alternativ å si hvor på linjen du leter etter tekst – dvs. slutten av linjen (datoen en rapport kjøres finner du for eksempel ofte der), start på linjen (som for eksempel kan være rapportnavnet eller sidenummeret), eller hvor som helst på linjen. "Select Case"-delen av koden sjekker i den relevante posisjonen, og hvis teksten vi leter etter ikke eksisterer, vil ikke linjen bli skrevet ut til den nye filen.

Bruke koden

For å gå tilbake til eksemplet vårt, la oss si at hver side i rapporten/filen vi ønsker å importere har en bunntekst som lyder:

Side 1 av 30

Det vi må gjøre her er at når vi går gjennom de individuelle linjene i kodearrayen vår, må vi åpenbart ignorere alle linjer som ertart med "Side" – det kan være mellomrom på sidentart av linjen, men disse fjernes ved å bruke Trim()-funksjonen i koden.

For å fjerne disse linjene fra filen vår ville vi ganske enkelt bruke følgende kommando:

CleanFile(“H:\Input.txt”, “H:\Output.txt”, “Page “, “START")

Når filen er kjørt, vil Output.txt-filen inneholde alle linjene unntatt sidebunntekstene – som er akkurat det vi ønsker.

Forfatterintroduksjon:

Mitchell Pond er en datagjenopprettingsekspert innen DataNumen, Inc., som er verdensledende innen datagjenopprettingsteknologier, inkludert reparasjon SQL Server db og excel-programvareprodukter for gjenoppretting. For mer informasjon besøk www.datanumen. Med

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket *