29. september 2004 - 11:48Der er
16 kommentarer og 1 løsning
Inportering af mange lignende tekst filer
Jeg har mange tekstfiler som er meget ens, filerne er placeret i en mappe på c: drevet c:/ftp. Hvert minut bliver det tilføjet en eller flere tekstfiler som alle har lignende indhold. Eksempel på indhold i en tekstfil.:
dm12345 placeingsnavn dm12345154429092004.jpg
Alle filerne har det sammme antal linjer men med filerne heder noget forskelligt og har forskelligt indhold. Mappen som tekst filerne bliver gemt i indholder også billedfiler.
Jeg har ønske om at lave en macro eller lignende som tager indholdet af filerne og sætter ind i en tabel, når den har læst indholdet af en fil og insat det i tabellen skal den flytte filen i en undermappe eller slette den, derefter skal den søge efter en ny fil og gøre det samme igen og igen, indtil det ikke er flere filer med txt efternavn i mappen. Dette skal den gøre ca engang i minuttet.
Dvs. hver fil indholder 3 linjer som bliver sat ind i en tabel på 3 kolonner. Jeg kunne godt bruge "Hent eksterne data" funktionen i Access men,,,,, det skal klikkes mange gange i minuttet :-) Er det en automatiseret funktion man kunne aktivere ca en gang i minuttet for at gøre det nemt at inportere data ind i tabellen?
Nej, men der er en masse kode i det hvis du ikke har forstand på VBScript og ADO
Men her demonstrerer jeg at du faktisk kan få indholdet ud (med en MessageBox) hvorefter filen kopieres (og overskriver en evt eksisterende fil af samme navn), og slettes
Dim objFSO, objFolder, objFile, strExt, strFilecontent Set objFSO = CreateObject("Scripting.FilesystemObject") Set objFolder = objFSO.GetFolder("f:\ftp")
for each objFile in objFolder.Files strExt = Split(objFile.Name, ".")(1) if Lcase(strExt) = "txt" then strFilecontent = objFile.OpenAsTextStream.ReadAll() objFile.Copy "f:\ftp\Indlæst\", True objFile.Delete MsgBox (strFilecontent) end if next
Set objFSO = nothing Set objFolder = nothing
Hvis du giver mig følgende: Stien til din Access database, incl. filnavnet Navnet på tabellen og de kolonner der skal sættes ind i
Dim objFSO, objFolder, objFile, strExt, strFilecontent, arrFilecontent Set objFSO = CreateObject("Scripting.FilesystemObject") Set objFolder = objFSO.GetFolder("C:\ftp")
Set Con = CreateObject("ADODB.Connection") Set Com = CreateObject("ADODB.Command") Set Rec = CreateObject("ADODB.Recordset")
Con.Open ConnectionString Com.ActiveConnection = Con Com.CommandText = "SELECT top 1 location, timedate, number, picture FROM logtable WHERE ID = 0" Rec.Open Com, , 3, 3
on error resume next
for each objFile in objFolder.Files strExt = Split(objFile.Name, ".")(1) if Lcase(strExt) = "txt" then strFilecontent = objFile.OpenAsTextStream.ReadAll() arrFilecontent = Split(strFilecontent, VbCrLf) Rec.AddNew Rec("location") = arrFilecontent(0) Rec("timedate") = arrFilecontent(1) Rec("number") = arrFilecontent(2) Rec("picture") = arrFilecontent(3) Rec.Update if Con.Errors.Count = 0 and Err.Number = 0 then objFile.Copy "C:\ftp\Indlæst\", True objFile.Delete else Rec.Delete Rec.Update Con.Errors.Clear Err.Clear end if
end if next
Rec.Close Con.Close
Set objFSO = nothing Set objFolder = nothing Set Con = nothing Set Com = nothing Set Rec = nothing
"Der skal stå noget på alle linier i filen, er det OK?"
Nej, det var fordi jeg ikke havde sat TilladNulllængde til Ja i min Access. Gør det, og den vil betragte en tom linie som en gyldig linie, og lade det tilsvarende felt være tomt
Til slut skal du have den til at køre automatisk, og det gøres via Sceduled Tasks (Eller Opgavestyring eller Planlagte opgaver, afhængig af windows versionen)
Lad mig nu vide hvis du har problemer, så skal jeg hjælpe med fejlfindingen. Jeg kan da dårligt forestille mig at det virker i første forsøg.
Jo tak, jeg kunne også forså det meste af det du har lavet.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.