27. februar 2006 - 15:24Der er
14 kommentarer og 1 løsning
Tilretning af import rutine - Import af tekstfiler
Hej, Jeg har gennem tidligere spørgsmål her på Eksperten, fået kodet en stabil import rutine.
Nu vil jeg gerne have indsat nogle variabler der skal bruges når dataene skal postes til databasen.
For hver insert til i databasen ser min SQL-streng således ud: sql = "insert into tbl_log (logDate,logTime,logValue,logType) values('"&var1&"','"&var2&"',"& datalinie &","&var3&")"
logDate = var1 logTime = var2 + 1 sek. (For hver gang der tilføjes en ny linje i en kategori, skal der ligges 1 sek. til variablen) Dette gøres med var2 = dateAdd("s", 1, var2) - Dette gælder for alle 3 kategorier.
var3 = Kategorien hvorfra data postes. 1,2 eller 3.
Håber at I kan hjælpe mig videre med denne import rutine.
I skal spørge løs, hvis jeg ikke har forklaret min problemstilling tilfredsstillende.
For en god ordens skyld kommer her hele koden pt.: ------------------------ START ------------------------ Set FSO = CreateObject("Scripting.FileSystemObject") Set Folder = FSO.GetFolder("H:/data/")
For Each File In Folder.Files Response.Write(File.Name & "<br>")
dim header(6) Set fs = FSO.OpenTextFile("H:/data/"&File.Name, 1)
for i = 0 to 6 if not fs.AtEndOfStream then Header(i) = fs.ReadLine else response.write "Fejl ved læsning af filheader. Ugyldig filformat." exit for end if next
if not fs.AtEndOfStream then do while not fs.AtEndOfStream 'læs til enden af filen for i = 1 to Header(2) if not fs.AtEndOfStream then datalinie = fs.ReadLine response.Write(i & " " & datalinie&"<br>") ' TODO: indsæt i databasen... else response.write "Fejl ved læsning af data. Ikke komplet dataformat." exit for ' Afslut indre løkke, hvis der ikke er mere data end if next loop end if
fs.Close Next ------------------------ END ------------------------
--------------- Eksempel på Tekstfil ---------------- 05-12-2005 18:00:00 'Dato og tid for logstart 60 ' antal målinger i minuttet 3 'Antal målinger pr. kategori 3 'Antal kategorier Temperatur '1. kategori PH '2. kategori Pumpe '3. kategori 1268 'data for 1. katagori 1268 'data for 1. katagori 1268 'data for 1. katagori 758 'data for 2. katagori 758 'data for 2. katagori 759 'data for 2. katagori 0 'data for 3. katagori 0 'data for 3. katagori 1 'data for 3. katagori --------------- Eksempel på Tekstfil ----------------
Set FSO = CreateObject("Scripting.FileSystemObject") Set Folder = FSO.GetFolder("H:/data/")
For Each File In Folder.Files Response.Write(File.Name & "<br>")
dim header(6) Set fs = FSO.OpenTextFile("H:/data/"&File.Name, 1)
for i = 0 to 6 if not fs.AtEndOfStream then Header(i) = fs.ReadLine else response.write "Fejl ved læsning af filheader. Ugyldig filformat." exit for end if next
if not fs.AtEndOfStream then var3 = 0 do while not fs.AtEndOfStream 'læs til enden af filen var3 = var3 + 1 for i = 1 to Header(2) if not fs.AtEndOfStream then datalinie = fs.ReadLine 'response.Write(dateAdd("s", 1, var2)) 'response.Write(i & " " & datalinie&"<br>") ' TODO: indsæt i databasen... logDate = var1 logTime = dateAdd("s", 1, var2) sql = "insert into tbl_log (logDate,logTime,logValue,logType) values('"&var1&"','"&var2&"',"& datalinie &","&var3&")" else response.write "Fejl ved læsning af data. Ikke komplet dataformat." exit for ' Afslut indre løkke, hvis der ikke er mere data end if next loop end if
Sludder! Der bliver jo ikke lagt et sekund til var2 for hvert loop - sorry. Jeg tror denne sørger for dette:
Set FSO = CreateObject("Scripting.FileSystemObject") Set Folder = FSO.GetFolder("H:/data/")
For Each File In Folder.Files Response.Write(File.Name & "<br>")
dim header(6) Set fs = FSO.OpenTextFile("H:/data/"&File.Name, 1)
for i = 0 to 6 if not fs.AtEndOfStream then Header(i) = fs.ReadLine else response.write "Fejl ved læsning af filheader. Ugyldig filformat." exit for end if next
if not fs.AtEndOfStream then var3 = 0 do while not fs.AtEndOfStream 'læs til enden af filen var3 = var3 + 1 for i = 1 to Header(2) if not fs.AtEndOfStream then datalinie = fs.ReadLine var2 = dateAdd("s", 1, var2) logDate = var1 logTime = var2 sql = "insert into tbl_log (logDate,logTime,logValue,logType) values('"&var1&"','"&var2&"',"& datalinie &","&var3&")" ' TODO: execute på connectionobjektet... conn.execute sql else response.write "Fejl ved læsning af data. Ikke komplet dataformat." exit for ' Afslut indre løkke, hvis der ikke er mere data end if next loop end if
SoftSpot >>> Det meste af dit forslag virker som forventet. - Tiden bliver dog ikke beregnet korrekt.
I dit eksempel bliver der lagt 1 sek. til kontinuerligt hele filen igennem. Tiden skal nulstilles for hver kategori. (Værdilinjerne 1,4,7 & 2,5,8 osv. hører sammen) Håber det forklarer det lidt bedre.
Set FSO = CreateObject("Scripting.FileSystemObject") Set Folder = FSO.GetFolder("H:/data/")
For Each File In Folder.Files Response.Write(File.Name & "<br>")
dim header(6) Set fs = FSO.OpenTextFile("H:/data/"&File.Name, 1)
for i = 0 to 6 if not fs.AtEndOfStream then Header(i) = fs.ReadLine else response.write "Fejl ved læsning af filheader. Ugyldig filformat." exit for end if next
var1 = left(Header(0),8) 'Dato
if not fs.AtEndOfStream then var3 = 0 do while not fs.AtEndOfStream 'læs til enden af filen var2 = right(Header(0),8) 'Klokkeslet var3 = var3 + 1 for i = 1 to Header(2) if not fs.AtEndOfStream then datalinie = fs.ReadLine var2 = dateAdd("s", 1, var2) logDate = var1 logTime = var2 sql = "insert into tbl_log (logDate,logTime,logValue,logType) values('"&var1&"','"&var2&"',"& datalinie &","&var3&")" ' TODO: execute på connectionobjektet... conn.execute sql else response.write "Fejl ved læsning af data. Ikke komplet dataformat." exit for ' Afslut indre løkke, hvis der ikke er mere data end if next loop end if
Hej SoftSpot, Jeg har lige opdateret en fejl i scriptet :(
Når jeg skal importere flere filer i samme rutiner, melder den følgende fejl: Der opstod en Microsoft VBScript-kørselsfejl (0x800A000D) Typer stemmer ikke overens line 16 = dim header(6)
Umiddelbart ville jeg mene at du bare skal flytte erklæringen af header udenfor løkken, således:
dim header(6)
For Each File In Folder.Files Response.Write(File.Name & "<br>")
Set fs = FSO.OpenTextFile("H:/data/"&File.Name, 1)
for i = 0 to 6 if not fs.AtEndOfStream then Header(i) = fs.ReadLine else response.write "Fejl ved læsning af filheader. Ugyldig filformat." exit for end if next
var1 = left(Header(0),8) 'Dato
if not fs.AtEndOfStream then var3 = 0 do while not fs.AtEndOfStream 'læs til enden af filen var2 = right(Header(0),8) 'Klokkeslet var3 = var3 + 1 for i = 1 to Header(2) if not fs.AtEndOfStream then datalinie = fs.ReadLine var2 = dateAdd("s", 1, var2) logDate = var1 logTime = var2 sql = "insert into tbl_log (logDate,logTime,logValue,logType) values('"&var1&"','"&var2&"',"& datalinie &","&var3&")" ' TODO: execute på connectionobjektet... conn.execute sql else response.write "Fejl ved læsning af data. Ikke komplet dataformat." exit for ' Afslut indre løkke, hvis der ikke er mere data end if next loop end if
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.