Avatar billede valur Nybegynder
29. september 2004 - 11:48 Der 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?
Avatar billede ldanielsen Nybegynder
29. september 2004 - 12:15 #1
Du kan skrive det i VBScript, gemme det i en *.vbs-fil, og køre den med Opgavestyring.

Jeg har selv lavet noget tilsvarende før.
Avatar billede ldanielsen Nybegynder
29. september 2004 - 12:19 #2
Et spor:

Dim objFSO, objFolder, objFile
Set objFSO = CreateObject("Scripting.FilesystemObject")
Set objFolder = objFSO.GetFolder("c:\ftp")

for each objFile in objFolder.Files
  'blabla.
next

Set objFSO = nothing
Set objFolder = nothing

Siger det dig noget :o)
Avatar billede valur Nybegynder
30. september 2004 - 12:24 #3
Hm,,,,, neh, er det en "Step by step" guide et eller andet sted?
Avatar billede ldanielsen Nybegynder
30. september 2004 - 15:30 #4
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

- så vil jeg gerne lave det til dig
Avatar billede valur Nybegynder
30. september 2004 - 16:14 #5
Access database - c:\ftp\database.mdb
Tablenavn - table
kolonnenavn - location, timedate, number, picture

Altså linie1 i tekstfilen skal være i location
linie2 timdate osv....
Avatar billede ldanielsen Nybegynder
30. september 2004 - 16:42 #6
ok

Hvad med datatyperne på kolonnerne? tekst dato tal eller hvad?

Og hvis der er en dato i teksten, hvilket format kommer den i?

Jge går straks igang
Avatar billede valur Nybegynder
30. september 2004 - 17:01 #7
alle er tekst

tak
Avatar billede ldanielsen Nybegynder
30. september 2004 - 17:12 #8
OK

Hvad er Tabellens Primær nøgle?

Og så er det en dum ide at kalde tabellen for "Table", da det er et reserveret ord, kan du omdøbe den?

Husk at tænke på max længde af felterne, ikke?
Avatar billede valur Nybegynder
30. september 2004 - 17:15 #9
logtable heder den nu
ID (autonr) er primkr nøgle
Avatar billede ldanielsen Nybegynder
30. september 2004 - 17:53 #10
Dim objFSO, objFolder, objFile, strExt, strFilecontent, arrFilecontent
Set objFSO = CreateObject("Scripting.FilesystemObject")
Set objFolder = objFSO.GetFolder("C:\ftp")


Dim Con, Com, Rec, ConnectionString

ConnectionString = "DRIVER=Microsoft Access Driver (*.mdb);UID=admin;UserCommitSync=Yes;Threads=3;SafeTransactions=0;PageTimeout=5;MaxScanRows=8;MaxBufferSize=2048;FIL=MS Access;DriverId=25;DefaultDir=C:\ftp;DBQ=C:\ftp\database.mdb"

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
Avatar billede ldanielsen Nybegynder
30. september 2004 - 17:55 #11
Det skulle være det

Det skal gemmes som en tekstfil med extension vbs

Jeg flytter filerne til c:\ftp\Indlæst, så den skal være der

Den springer filer over hvis den ikke kan håndtere dem. Der skal stå noget på alle linier i filen, er det OK?
Avatar billede ldanielsen Nybegynder
30. september 2004 - 18:01 #12
Rettelse:

"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
Avatar billede ldanielsen Nybegynder
30. september 2004 - 18:01 #13
Og så: Dobbeltklik på den, og se hvad der sker :o)
Avatar billede ldanielsen Nybegynder
30. september 2004 - 22:28 #14
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.
Avatar billede valur Nybegynder
01. oktober 2004 - 09:13 #15
Idanielsen, TAK TAK, det virker!!
Kom med et svar så får du velfortjent belønning.
Avatar billede ldanielsen Nybegynder
01. oktober 2004 - 10:05 #16
Jo tak :o)

Men nu skal du lige sørge for at teste meget grundigt, for der må vel helst ikke gå noget galt?

Og så skulle du måske selv lære lidt VBScript/VisualBasic/VBA, for det er meget relevant hvis man arbejder med Access, eller andre dele af Office.

Og VBScript er desuden det sprog man bruger når man laver ASP
Avatar billede valur Nybegynder
01. oktober 2004 - 11:14 #17
Jo tak, jeg kunne også forså det meste af det du har lavet.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester