Avatar billede ste Nybegynder
27. december 2004 - 14:34 Der er 13 kommentarer og
2 løsninger

Import med liniskift som separator.

Hej eksperter.
Jeg skal importer dat a fra en text fil, og den enste separator jeg har er et linieskift. Access guiden ser umiidelbart ikke ud til at kunne hjælpe mig. Hvordan gør jeg. Jeg vedlægger lidt data som eksempel på det jeg skal have importeret.

Thu Sep 16 00:00:41 2004
Sensor, Level dB
65.1
65.3
65.5
65.4
64.7
65.4
65.0
64.5
64.0
65.5
65.9
64.8
66.2
63.3
64.8
65.6
63.8
64.7
63.8
64.7
65.4
65.3
66.5
77.5

Thu Sep 16 00:01:46 2004
Sensor, Level dB
65.1
65.3
65.5
65.4
64.9
65.5
65.0
64.5
64.0
65.5
66.0
64.7
66.6
63.3
64.8
65.6
63.8
64.7
63.8
64.7
65.0
65.3
66.5
77.1
Det er en rutine der bliver lagret for hvert minut ca. Den består at 2 txt linier og så 24 tal linier. Jeg vil gerne have hvert minut læst ind som en række med følgend felter Dato/tid og så tallene i hvert sit felt. (25 felter).
Håber en kan hjælpe.
Avatar billede terry Ekspert
27. december 2004 - 14:43 #1
The problem with your data is that in one column you have text and numbers. So you need to import to a table with one coulmn and then in code convert to a table with the layout you need
Avatar billede ste Nybegynder
27. december 2004 - 14:50 #2
Jeg er ikke stærk i at programmere i Access så det er ikke en mulighed for mig. Jeg troede jeg kunne bruge antal tegn eller noget i den stil Det er altid denne måde dataerne blive gemt på.
Avatar billede terry Ekspert
27. december 2004 - 16:07 #3
can you send an example of the Excel file to me and I will see if I can put some code together for you.
I also need to know the table layout you want to impoprt into

eksperten@NOSPAMsanthell.dk
Remove NOSPAM

If you send it then I will take a look as soon as I can, rather busy with other things (Christmas/New Year) :o)

mvh
Terry
Avatar billede ste Nybegynder
27. december 2004 - 17:10 #4
Det er ikke en excel fil, men kun ent txt fil som ser ud som eksemplet ovenover. Det gentager sig for hver minut døgnet rundt. Det ovenstående eksempel skulle så ende med 2 rækker med 25 felter.
Avatar billede terry Ekspert
27. december 2004 - 17:32 #5
I would have thought that you would have 2 (maybe 3) fields with 24 rows for each minute

DateTime            Sensor        Reading
------------------------    --------    ----
Thu Sep 16 00:00:41 2004    Level dB    65.1
Thu Sep 16 00:00:41 2004    Level dB    65.3
.
.


Thu Sep 16 00:01:46 2004    Level dB    65.1
Thu Sep 16 00:01:46 2004    Level dB    65.3
.
.
Avatar billede ste Nybegynder
27. december 2004 - 20:02 #6
ja det er også en mulighed. Men så får jeg en masse overflødig data.
Jeg havde tænkt
Date                      sensor 1      sensor 2    sensor 3      osv.  sensor 24
Thu Sep 16 00:00:41 2004    65.1          65.3          65.5        osv.  77.5
Avatar billede jesperfjoelner Nybegynder
28. december 2004 - 12:08 #7
Hej Ste,

Send mig din email så sender jeg dig et eksempel på hvad du kan gøre.
Avatar billede jesperfjoelner Nybegynder
28. december 2004 - 12:09 #8
På jesperfjoelnerREMOVE@hotmail.com
Avatar billede ste Nybegynder
28. december 2004 - 12:33 #9
Hvorfor kan du ikke lægge løsningen ind her.
Avatar billede jesperfjoelner Nybegynder
28. december 2004 - 14:21 #10
OK, jamen jeg forestillede mig at du har en tabel (table1) med felterne:

ID(autonummer), DatoTid(text), sensor1(nummer), sensor2(nummer) osv...
indtil sensor24(nummer).

I en formular (form1) kunne du angive det filnavn (i feltet: "txtFilNavn") du vil importere (evt. ved at bruge windows api dialogboxen til at finde filen).

Og så en knap (cmdImporter) til at importere data til tabellen med følgende kode bagved:

Private Sub cmdImporter_Click()
On Error GoTo err_
Dim fso        As New FileSystemObject
Dim db          As DAO.Database
Dim rs          As DAO.Recordset
Dim fl          As File              'filen der skal importeres fra
Dim ts          As TextStream        'texten i filen
Dim sReadLine  As String
Dim i          As Integer

Set db = CurrentDb()
Set rs = db.OpenRecordset("table1")
Set fl = fso.GetFile(Me.txtfilnavn)
Set ts = fl.OpenAsTextStream(ForReading)

Do While Not ts.AtEndOfStream
    'første linje læses, hvis den er tom gåes ned til første linje med noget i
    sReadLine = ts.ReadLine
    If Len(sReadLine) < 1 Then
        Do Until Len(sReadLine) > 1
            sReadLine = ts.ReadLine
        Loop
    End If
    'starter på tilføjelse af en post i tabellen
    rs.AddNew
    'datofelt indsættes
    rs!DateTime = sReadLine
    'Læster linjen "Sensor, Level dB" men den skal ikke bruges
    ts.SkipLine
    'så næste linje læses med det samme
    sReadLine = ts.ReadLine
    'gennenløber de 24 tal og indsætter i tabellen.
    'obs! felterne skal hedde "sensor1", "sensor2" osv
    For i = 1 To 23
        sReadLine = ts.ReadLine
        rs("sensor" & i) = sReadLine
    Next
    i = 0
    rs.Update
    If ts.AtEndOfStream = True Then
        Exit Do
    End If
Loop
MsgBox "Alt er importeret"

err_:
    Select Case Err.Number
        Case 62 'slut på fil
            Exit Sub '
    End Select
End Sub

Husk der skal være referencer til DAO 3.6 og Microsoft Scripting Runtime.
Det virker her hos mig.
Avatar billede ste Nybegynder
28. december 2004 - 14:25 #11
Ok. Det er avanceret. Jeg er stået af, og skal nu guides rigtigt. Hvor skal jeg sætte denne kode ind. Skal jeg gøre det via Access?
Avatar billede jesperfjoelner Nybegynder
28. december 2004 - 14:28 #12
hov jeg kan se at jeg i tabellen har kaldt feltet for "Datotid" men i koden har jeg kaldt det for "datetime". Det skal lige rettes.
Sig til hvis ikke det virker.
Avatar billede jesperfjoelner Nybegynder
28. december 2004 - 14:34 #13
Ja, har du en formular hvor du vil lave importen fra? Ellers skal du oprette en.
På den formular laver du en knap der hedder "cmdImporter".
På formularen skal der også være en textbox, der hedder "txtFilnavn".
Når du så skal importere filen skal du skrive hele stien til filen i textboxen.
Fx. "c:\data.txt".

Referencerne til DAO 3.6 og Microsoft Scripting Runtime som jeg nævner tilføjes på følgende måde:
Tryk alt+F11 for at åbne kode-editoren. Vælg Tools > References.
På listen skal du finde "Microsoft DAO 3.6" (eller 3.51) og sætte et kryds.
Find også "Microsoft Scripting Runtime" og sæt et kryds.
Vælg nu Tools > Options > fanen General og afkryds i "Break on unhandled errors".
Luk vba editoren.
Er det til at finde ud af?
Avatar billede ste Nybegynder
28. december 2004 - 14:37 #14
Jeg tror lige jeg skal lege lidt med. Melder mig så snart jeg har prøvet, men det bliver nok først i morgen.
Avatar billede ste Nybegynder
18. marts 2005 - 16:45 #15
Hej i 2.
Det er næsten pinligt, men jeg har desværre ikke haft lejlighed til at prøve jeres løsninger, men på grund af den lange ventetid, deler jeg pointsene mellem jer. Jeg skal nok vende tilbage med en bekræftelse på hvad der virker engang.
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