[VB6] CSV-file lezen met ADO

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • der_roedie
  • Registratie: Januari 2007
  • Laatst online: 27-06-2022
Hallo,

ik moet voor mijn werk een CSV-bestand uitlezen mbv. een VB6-applicatie.

Ik gebruik hiervoor ADO want ik wil diverse velden met elkaar combineren. Dit vind ik met de textstream niet echt makkelijk gaan dus van daar mijn keuze voor ADO.

Ik kan verbinden met het bestand maar de eerste 2 regels leest het programma niet uit. Het bestand bestaat uit een kolom of 20 en 90 regels.
Wanneer ik via

code:
1
rs.fields(0)


de waarde van de eerste kolom op de eerste rij wil uitlezen dan werkt dat goed maar wanneer ik de kolomen daarnaast wil uitlezen dan bevatten deze volgens de applicatie geen data terwijl dit wel het geval is.

Wanneer ik vervolgens verder door het CSV-bestand ga met de functie:

code:
1
rs.movenext


dan bevatten de kolommen wel weer data.

ik moet die eerste regel met data uit kunnen lezen want hierin staat voor mij zeer belangrijke informatie waarzonder ik niet kan.

De connectie string is de volgende:
code:
1
2
3
4
5
6
7
8
9
Set csv = New ADODB.Connection
Set rs = New ADODB.Recordset

csv.Open "Provider=Microsoft.Jet.OLEDB.4.0;" _
        & "Data Source=" & pathname & ";" _
        & "Extended Properties=""text;FMT=Delimited;HDR=NO"""
With rs
    .Open "Select * From [" & filenaam & "]", csv, _
            adOpenStatic, adLockPessimistic, adCmdText


Hieronder een klein deel van de CSV file.

code:
1
2
3
4
5
6
Run,Time,52Cr-H2,59Co-H2,60Ni-H2,63Cu-H2,64Zn-H2,65Cu-H2,66Zn-H2,71Ga-H2,75As-H2,103Rh-H2,111Cd,114Cd,118Sn,121Sb,123Sb,125Te,193Ir-H2,202Hg,206Pb,207Pb,208Pb
,,ppb,ppb,ppb,ppb,ppb,ppb,ppb,ppb,ppb,ppb,ppb,ppb,ppb,ppb,ppb,ppb,ppb,ppb,ppb,ppb,ppb
,,rinse    2/9/2009 12:13:47 PM,,,,,,,,,,,,,,,,,,,,
1,12:14:12,-0.700,0.361,-0.652,-1.608,2.790,-1.678,2.485,97.412%,-0.035,98.431%,0.061,0.040,0.000,0.046,0.041,0.000,98.715%,-0.163,0.000,0.000,-0.279
2,12:14:38,-0.590,0.342,-0.761,-1.596,1.112,-1.695,1.455,101.791%,-0.113,100.580%,0.034,0.042,0.000,0.030,0.041,0.000,99.801%,-0.172,0.000,0.000,-0.275
3,12:15:04,-0.708,0.336,-0.721,-1.595,0.422,-1.673,0.102,100.797%,-0.038,100.990%,0.041,0.054,0.000,0.031,0.034,0.000,101.484%,-0.123,0.000,0.000,-0.285


Ik kan dus van de eerste regel alleen veld 0 (=RUN) uitlezen, wanneer ik de andere velden op deze regel wil lezen dan bevatten deze geen data :? terwijl dit er toch duidelijk staat (Time, 52Cr-H2 etc.)

Vervolgens op regel 5 ben ik wel weer in staat om de velden verderop in de regel te lezen.... 8)7

Wie kan me helpen?

Trotse pappa van Yfke sinds 04-03-2009!!!


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 23-09 20:04
Kan het te maken hebben met bijvoorbeeld landinstellingen? ( het formaat van bijvoorbeeld een datum of een lijstscheidingsteken )

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
code:
1
HDR=NO


Als je die eens op YES zet, hebben de fields dan niet gewoon netjes de namen die ze horen te hebben? Dus field(0).name = "Run", field(1).name = "Time" etc...?

Trouwens, met een paar simpele regels code lees je makkelijk zelf een textfile uit:

Even uit de blote bol, is al even geleden :P

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Dim FF as integer, I as integer
Dim MyLine as string
Dim Flds() as string

FF = FreeFile
Open "C:\blah\foo.txt" for input as #FF
While not EOF(FF)
  Line Input #FF, MyLine
  Flds = Split(MyLine, ",")
  For I = 0 to UBound(Flds)
    Debug.Print I & ": " & Flds(I)
  Next
  Debug.Print String(20,"=")
Wend
Close #FF


Overigens; klopt het dat de 'kopregels' over meer dan 1 regel lopen? En, zo op het oog, heb je meer koppen dan values? Of ben ik nog niet helemaal helder? :P

AFAIK verwacht de ADO driver iets van:

code:
1
2
3
4
Veldnaam,Veldnaam,Veldnaam,Veldnaam,Veldnaam
Waarde,Waarde,Waarde,Waarde,Waarde
Waarde,Waarde,Waarde,Waarde,Waarde
...

[ Voor 77% gewijzigd door RobIII op 10-02-2009 09:57 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • der_roedie
  • Registratie: Januari 2007
  • Laatst online: 27-06-2022
zoww, was ff niet in staat om hier te reageren maar anyway.

Bedankt voor de reacties. Ik ben uiteindelijk voor een vergelijkbare oplossing gegaan als Roblll ook geeft. Dus inlezen en opsplitsen. Werkt ook goed.

Ook het aanzetten van
code:
1
HDR=YES

gaf niet het gewenste resultaat. Vreemd maar waar.

Verder is het nu gelukt om alle relevante data uit het bestand te halen en verder te verwerken.

Bedankt :)

Trotse pappa van Yfke sinds 04-03-2009!!!


Acties:
  • 0 Henk 'm!

Verwijderd

Pas wel op dat met de oplossing van Roblll er geen rekening wordt gehouden met aanhalingstekens(")
dus mochten er waarden in zitten met een komma ipv punt. Dan wordt bij dat stukje code niet goed uitgelezen.
code:
1
1,"12:14:12","-0,700"

wordt gezien als:
code:
1
2
3
4
1
"12:14:12"
"-0
700"

maar zou moeten zijn:
code:
1
2
3
1
12:14:12
-0,700


CSV - rfc4180
Als de invoer geen aanhalingstekens en komma's in waarden mag hebben hoef je hier geen rekening mee te houden. Maar dan is er in ieder geval bewust voor gekozen en wel aan gedacht =)