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: