Avatar billede wolfgang Praktikant
27. februar 2006 - 15:24 Der 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
   
    var1 = left(Header(0),8) 'Dato
    var2 = right(Header(0),8) 'Klokkeslet
   
      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 ----------------
Avatar billede softspot Forsker
27. februar 2006 - 15:33 #1
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
  var2 = right(Header(0),8) 'Klokkeslet
   
  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

  fs.Close
Next
Avatar billede softspot Forsker
27. februar 2006 - 15:35 #2
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
 
  var1 = left(Header(0),8) 'Dato
  var2 = right(Header(0),8) 'Klokkeslet
   
  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

  fs.Close
Next
Avatar billede wolfgang Praktikant
27. februar 2006 - 15:39 #3
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.
Avatar billede wolfgang Praktikant
27. februar 2006 - 15:42 #4
Hov... Havde ikke set dit 2. indlæg.
Tester lige.
Avatar billede softspot Forsker
27. februar 2006 - 15:44 #5
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

  fs.Close
Next
Avatar billede wolfgang Praktikant
27. februar 2006 - 15:44 #6
Nej - det afhjælper ikke problemet.
Avatar billede wolfgang Praktikant
27. februar 2006 - 15:45 #7
Doh! Glemte endnu engang at opdatere :(
Tester igen.
Avatar billede wolfgang Praktikant
27. februar 2006 - 15:49 #8
Så virker det!
Kan du så få oprettet en velfortjent svar :)
Avatar billede softspot Forsker
27. februar 2006 - 15:51 #9
Det skal jeg nok :)
Avatar billede wolfgang Praktikant
27. februar 2006 - 15:52 #10
Mange tak for din store hjælp.
Håber at mange andre kan få dette spørgsmål lige så.
Avatar billede wolfgang Praktikant
27. februar 2006 - 15:52 #11
Mange tak for din store hjælp.
Håber at mange andre kan få stor gavn dette spørgsmål lige så.
Avatar billede softspot Forsker
27. februar 2006 - 15:55 #12
Velbekomme og mange tak for point :)
Avatar billede wolfgang Praktikant
28. februar 2006 - 16:33 #13
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)

Det virker så længe der kun er 1 fil i mappen.

Kan du afhjælpe dette?
Avatar billede softspot Forsker
28. februar 2006 - 18:10 #14
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

  fs.Close
Next
Avatar billede wolfgang Praktikant
28. februar 2006 - 19:40 #15
Takker...
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
Kurser inden for grundlæggende programmering

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