Feiertage berechnen und berücksichtigen - Teil 2

Textdatei lesen und in ein Array schreiben

Als Erstes benötigen Sie nun Code, der die Textdatei öffnet und ausliest. Damit Sie später nicht bei jedem Zugriff auf einen festen Feiertag wieder die Datei öffnen müssen, werden die einmal gelesenen Daten in ein Array geschrieben. Dieses wird zunächst auf Modulebene im Klassenmodul definiert, und zwar als dynamisches Array des Typs FTag.

Bild 1: Aufbau der Textdatei.
Bild 1: Aufbau der Textdatei.

FTag ist ein benutzerdefinierter Datentyp, der ebenfalls auf Modulebene definiert wird. Da öffentliche Datentypen in Klassenmodulen nicht zulässig sind, müssen Sie hier zwingend das Schlüsselwort Private verwenden (Listing 1).

Dim arrFTage() As FTag
Dim typFTag As FTag
Private Type FTag
Tag As Byte
Monat As Byte
Name As String
Land As String
End Type

Zum Lesen der Datei reicht eine private Prozedur, der Sie den Dateinamen einschließlich des Pfads der Textdatei übergeben (Listing 2). Innerhalb dieser Prozedur öffnen Sie die Textdatei und lesen sie in einer Schleife zeilenweise aus. Jede Zeile splitten Sie mit Hilfe der Split-Funktion in ein Array, dessen Werte Sie dann den entsprechenden Feldern des benutzerdefiniertem Typs zuweisen. Danach speichern Sie den Wert der Variablen typFTag in einem leeren Feld des Arrays und vergrößern das Array, damit auch die nächste Zeile gespeichert werden kann.

Private Sub FeiertageLesen(strDateiname As String)
Dim lngDatei As Long
Dim strFehler As String
Dim strZeile As String
Dim varZeile As Variant
Dim lngZeile As Long
On Error GoTo FEHLER
lngDatei = FreeFile()
Open strDateiname For Input As #lngDatei ' Datei öffnen.
'Auslesen der Einträge und einfügen in das Array
ReDim arrFTage(1)
lngZeile = -1
Do While Not EOF(lngDatei) ' Schleife bis Dateiende.
Input #lngDatei, strZeile
If Trim(strZeile) > "" Then
On Error Resume Next
varZeile = Split(strZeile, ";")
typFTag.Tag = varZeile(0)
typFTag.Monat = varZeile(1)
typFTag.Name = varZeile(2)
typFTag.Land = varZeile(3)
On Error GoTo FEHLER
End If
'Array vergrößern
lngZeile = lngZeile + 1
arrFTage(lngZeile) = typFTag
ReDim Preserve arrFTage(UBound(arrFTage) + 1)
Debug.Print strZeile
Loop
Close #lngDatei
'Texdatei öffnen
Exit Sub
FEHLER:
If Err.Number = 52 Then
strFehler = "Die Datei " & strDateiname & _
" ist nicht vorhanden oder kann nicht geöffnet werden!"
End If
'Debug.Print Err.Number & ": " & Err.Description
If strFehler > "" Then
On Error Resume Next
MsgBox strFehler
Close #lngDatei
Exit Sub
End If
End Sub