Ca parte a seriei noastre în curs de desfășurare de articole care acoperă importarea datelor în MS Access, vom acoperi un alt aspect comun al pregătirii unui fișier pentru a fi importat - și anume, ce faceți când aveți de importat fișiere care au linii de antet sau subsol cu numere de pagină pe ele? Din nou, oricât de comun este acesta, MS Access nu are o metodă încorporată pentru gestionarea acestor fișiere, așa că, în mod tradițional, trebuie să utilizați instrumente de procesare a textului precum Monarch Pro pentru a preprocesa fișierele înainte de a le importa. Dar dacă nu aveți acces la aceste instrumente? Sau nu doriți complicația suplimentară de a menține încă un alt pachet de software? În acest articol vă vom arăta cum, folosind puțin VBA, puteți elimina acele tipuri de linii din fișier înainte de atarimportul dvs.
Un exemplu – eliminarea subsolurilor de pagină sau antetelor înainte de a importa fișierul
Pentru acest articol, vom folosi o situație foarte comună pentru exemplul nostru - și anume, avem un fișier care conține text de subsol care are numărul paginii pe el. Bineînțeles, nu vrem să încercăm să importam acele linii în tabelul nostru, deoarece nu va fi în formatul corect, așa că ceea ce trebuie să facem este să eliminăm toate acele linii din fișier înainte de a-l importa. Înainte de a rămâne blocați în pregătirea soluției, rețineți întotdeauna că chiar și cele mai bune intenții pentru curățarea datelor pot cauza probleme dacă fișierul pe care îl importați are probleme majore de care nu le cunoașteți - rezultatele importului unui fișierul deteriorat sau formatat incorect ar putea chiar fișier Access corupt – deci faceți-vă timp pentru a vă asigura că știți ce trebuie curățat din orice fișier pe care îl importați înainte de a începe!
Apropierea
Cum vom face acest lucru este destul de simplu. Mai întâi vom citi întregul fișier într-un șir, apoi vom împărți acel șir într-o matrice pe care o putem trece în buclă și, în final, vom trece peste acel tablou, linie cu linie și vom scrie orice linie. cu excepția cele care se potrivesc cu modelul pe care îl căutăm înapoi într-un fișier. Codul de mai jos vă va permite să utilizați fie să creați un nou fișier curățat, fie să suprascrieți fișierul existent, pasând același nume de fișier atât pentru parametrii fileIn, cât și pentru fileOut.
Codul
Sub CleanFile(fileIn As String, fileOut As String, removePattern As String, Optional positionOfText As String = "oriunde") Dim fs As Variant Dim filObj As Variant Dim fileString As String Dim fileArray As Variant Dim doWrite As Boolean 'deschide fișierul pentru citire Set fs = CreateObject("Scripting.FileSystemObject") Set filObj = fs.OpenTextFile(fileIn, 1) „citește întregul fișier dintr-o singură mișcare fileString = filObj.readall „și împărțit într-o matrice fileArray = Split(fileString, vbNewLine) filObj .Close „creați fișierul nostru de ieșire - suprascrieți dacă acesta există deja Set filObj = fs.CreateTextFile(fileOut, True) For Each ln In fileArray doWrite = False „imite doar linia dacă NU conține șirul pe care îl căutăm Selectați Cazul UCase(positionOfText) Cazul „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" Dacă InStr(ln, removePattern) = 0, atunci doWrite = True Case Else MsgBox „Parametrul nevalid dat - opțiunile valide sunt: START, END, sau ANYWHERE", vbExclamation, "Incorect parametru dat" End Select If doWrite Then filObj.writeline ln Next End Sub
Explicarea codului
Pentru a putea folosi codul în multe situații diferite, am adăugat o opțiune pentru a spune Unde pe linia în care căutați text – adică sfârșitul rândului (data la care este rulat un raport este adesea găsită acolo, de exemplu), start al liniei (care, de exemplu, ar putea fi numele raportului sau numărul paginii) sau oriunde pe linie. Secțiunea „Selectare caz” a codului verifică poziția relevantă, iar dacă textul pe care îl căutăm nu există, atunci linia nu va fi scrisă în noul fișier.
Folosind codul
Revenind la exemplul nostru, să presupunem că fiecare pagină din raportul/fișierul pe care dorim să-l importăm are un subsol care scrie:
Pagina 1 din 30
Ceea ce trebuie să facem aici este că atunci când parcurgem liniile individuale din matricea noastră de cod, evident că trebuie să ignorăm toate liniile care sunttart cu „Pagină” – pot exista sau nu spații la start din linie, dar acestea sunt eliminate folosind funcția Trim() din cod.
Pentru a elimina acele linii din fișierul nostru, vom folosi pur și simplu următoarea comandă:
CleanFile(„H:\Input.txt”, „H:\Output.txt”, „Pagină”, „START”)
Odată rulat, fișierul Output.txt va conține toate liniile cu excepția subsolurile paginii – care este exact ceea ce ne dorim.
Introducerea autorului:
Mitchell Pond este un expert în recuperarea datelor DataNumen, Inc., care este lider mondial în tehnologiile de recuperare a datelor, inclusiv repara SQL Server db și produse software de recuperare Excel. Pentru mai multe informații vizitați www.datanumen.com
Lasă un comentariu