In dit artikel wordt uitgelegd hoe een datum uit een bestandsnaam gehaald kan worden met behulp van VBA. Dit proces wordt ook wel extraheren genoemd.
Voorbeeld 1
De bestandsnamen kunnen er als volgt uit zien:
• IMG-20170213-WA0000.jpg
• 20170722_220815.jpg
Om de datum te extraheren uit deze bestandsnamen kunnen de onderstaande twee oplossingen gebruikt worden.
Oplossing 1
Een manier om de datum uit de bestandsnaam te extraheren is om een herhaling te maken die telkens vanaf een ophogende startpositie controleert of de aansluitende gegevensreeks van 8 karakters numeriek is en de daarop volgende karakter niet.
Function datumStandaard(Bestandsnaam) For i = 1 To Len(Bestandsnaam) If IsNumeric(Mid(Bestandsnaam, i, 8)) = True And Not IsNumeric(Right(Mid(Bestandsnaam, i + 1, 8), 1)) Then datumStandaard = Mid(Bestandsnaam, i, 8) Exit For End If Next i End Function
Oplossing 2
Om in de plaats van zelf een algoritme te bedenken, zoals bij oplossing 1, kan er gebruik gemaakt worden van de functie Regular Expression. Hierbij hoeft alleen een patroon opgegeven te worden. In dit voorbeeld bestaat het patroon uit 8 getallen, oftewel 8 digits: "\d{8}". Deze patronen kunnen via deze website worden gegenereerd.
Function datumRegEx(Bestandsnaam, Patroon) Dim RegEx As Object Dim Overeenkomst, Overeenkomsten Set RegEx = CreateObject("VBScript.RegExp") RegEx.Pattern = Patroon Set Overeenkomsten = RegEx.Execute(Bestandsnaam) For Each Overeenkomst In Overeenkomsten datumRegEx = Overeenkomst.Value Exit For Next Overeenkomst End Function
Voorbeeld 2
Het eerste voorbeeld is relatief simpel. Het onderstaande voorbeeld is een stuk complexer:
- 23423_5 aug 2017-idz
- 23423_06 aug 2017-idz
- date created: 7 september 2017 -end
- datum: 21-10-2017 afgeleverd
- gereed gemaakt op 08.08.2017
- 9-8-2017
Om conform de eerste oplossing van het eerste voorbeeld zelf een algoritme te bedenken is uitermate ingewikkeld.
Het (laten) samenstellen van het patroon voor de Regular Expression is velen malen simpeler. Het patroon in dit voorbeeld is
"\d{1,2} [a-zA-Z]+ \d{4}|\d{1,2}([-.])\d{1,2}\1\d{4}" en kan als volgt worden uitgelegd.
Reg Exp | Onderdeel | Toelichting |
\d{1,2} | dag | 1 of 2 getallen (digits) |
[a-zA-Z]+ | maand | woord + spatie |
\d{4} | jaar | 4 getallen (digits) |
| | OF | |
\d{1,2} | dag | 1 of 2 getallen (digits) |
([-.]) | - of een . | |
\d{1,2} | maand | 1 of 2 getallen (digits) |
\1 | komt overeen met de 1e vergelijking | |
\d{4} | jaar | 4 getallen (digits) |
Download hier de toepassing.