Artikelindex

Standaard CSV bestanden (kommagescheiden bestanden of comma seperated values files, zie Wikipedia) zijn eenvoudig in te lezen middels het 1 voor 1 inlezen van de tekstregels en met de Split() functie de cellen te scheiden. Voorbeeld van een eenvoudig bestand:

aap,noot,mies
wim,zus,jet

Het scheidingsteken is vaak ',' of ';'. Dit werkt echter niet als de cellen, de values, het scheidingsteken zelf bevatten of dat een nieuwe regel, line feed, is opgenomen in de cel; bijvoorbeeld bij een buitenlands adres in een adressenbestand. In zo'n geval moet de cel ingepakt worden in aanhalingstekens, quotes. Voorbeeld:

'Dambord, hout','22,95'
'Dambord, karton','10,95'

Het aanhalingsteken is vaak " of '. Het meest uitgebreide situatie is dat zowel een scheidingsteken (,), een aanhalingsteken (') en een nieuwe regel voor kan komen in een bestand:

'Dambord, hout','22,95'
'Dambord, karton
(opvouwbaar)','10,95'
'Jojo''s, set van 5 stuks','18,00'

In Excel zou dit als volgt genoteerd kunnen zijn:

Zoals je in het voorbeeld ziet, dient het aanhalingsteken in Jojo's dubbel uitgevoerd te worden, ter onderscheid van het eind-aanhalingsteken. Nu kun je in dit voorbeeld eenvoudig het probleem omzeilen door scheidingsteken ';' en aanhalingsteken " te gebruiken, maar ook die kunnen gebruikt worden in de cellen en is dus geen permanente oplossing voor alle situaties.

Om deze complexiteit toch eenvoudig in code op te lossen is de klasse clsReadCSVFile geschreven. De klasse kan verschillende scheidingstekens en aanhalingstekens aan en neemt het openen en sluiten van het ASCII of Unicode bestand voor haar rekening. Daardoor is het inlezen van een CSV bestand in een tekenreeks, Array, eenvoudig:

If objCSV.OpenFile(sFileIn) < 0 Then
    MsgBox "Error opening file " & sFileIn, vbCritical, cApp
Else
    objCSV.SetQuote "'"
    objCSV.SetSep ","

    Do While Not objCSV.EOF
        rc = objCSV.ReadLine(asColumns, iColumns)
        MsgBox "Found " & iColumns & " columns: " & _
                    "[" & Replace(Join(asColumns, "]["), vbCrLf, "<LF>") & "]" & vbCrLf
        Loop
    objCSV.CloseFile
    Set objCSV = Nothing
End If

De code is uitgewerkt in een Test It Yourself VBA (MS Access) variant, een VBS Script variant en een Visual basic variant. Deze zijn hier te downloaden: sourcecode CSV Bestanden lezen.

Schermvoorbeelden van respectievelijk Visual Basic (Visual Studio 2013 project), VBScript, MS Access 2013 (MDB) en MS Excel 2013 (XLSM) versie:

imageimageimageimage

Contactgegevens

ing. JW (Jos) Verwijs

Asterdse Sluis 6

4823GL  BREDA

KVK Breda: 20096242

 

E: jos.verwijs <bij> 1000feet.com

 

Privacy statement

Support

Natuurlijk is er support voor projecten en de nazorgfase. Mocht u een vraag hebben over of problemen ondervinden met de opgeleverde projecten, maak dan een ticket aan op onze support pagina. We zullen zo snel mogelijk reageren. Veel gestelde vragen kunt u daar vinden in de Kennisbank.