VBA Class / Klasse zum Auslesen einer Textdatei

Hallo zusammen, heute mal wieder einen Beitrag aus dem wirklichem Programmierleben!

Das heutige Ziel war es, auf eine Config-Datei zuzugreifen und die Datei Zeile für Zeile auszulesen.

Hierfür habe ich eine VBA-Klasse gebaut die folgenden Systax hat.

1. Schritt -> Erzeuge ein neues Klassenmodul.

Screenshot zum erzeugen eines Klassenmoduls unter VBA

VBA Klassenmodul erzeugen.

2. der Dateiname zu dieser Datei lautet “Sess_Parm.tao”! Der Name ist völlig unrelevant, aber der Aufbau der Datei.

Hier der Datei Aufbau:

SessionID#asdf-234-223423dasdf-234
projekt_id#66
bauphase_id#5
modul_id#4
modul_path#C:\Temp\SysFolder

Ziel war es nun, die Datei zeilenweise auszulesen und auf basis des Hashtags “#” den String so zu zergliedern, das es später mölgich ist auf den Namen einer Collection zuzugreifen.

 

'Collection wird erzeugt
Private objCollection As New Collection
'Pfad zur Config-Datei wir in einer Constanten hinterlegt
Const PATH As String = "C:\Temp\"
' Dateiname ebenfalls in einer Constanten.
Const FILENAME As String = "Sess_Parm.tao"
'sLine ist die Zeile der Config-Datei
Private sLine As String
' Jetzt wird noch ein objFile erzeugt
Private objFile As Object
Dim fso As Object

'Prozedur um die Datei zu öffnen.
Sub openFile()

fileNo = FreeFile 'Holt sich die erste Free File Nummer
'öffnet die Datei zum Lesen 
Open PATH & FILENAME For Input As #fileNo

'Kopfgesteuerte Schleife zum auslesen der Zeilen. und zwar solange bis EOF (End of File)
Do While Not EOF(fileNo)
' Zeile wird in die Variable sLine hinterlegt
Line Input #fileNo, sLine
'Prozeduraufruf mit Übergabeparameter der Zeile
fillCollection sLine
Loop

' Schließt die Config-Datei
Close #fileNo


End Sub


'In dieser Prozedur wird jetzt die Collection befüllt
Sub fillCollection(sZeile As String)
'Varialbe für den späteren Array
Dim arrTemp
' jetzt wird die Ziele in zwei Teile geteilt und zwar gemäß dem Seperator (#)
arrTemp = Split(sZeile, "#")

'Prüfung mit UBound(UpperBound) ob die Zeile in zwei Teile aufgeteilt wurde
If UBound(arrTemp) = 1 Then
'Collection wird befüllt - a) mit dem item und b) mit dem Key
objCollection.Add item:=arrTemp(1), Key:=arrTemp(0)
End If
End Sub

'Hier noch eine Mehtode um die gesammte Collection zurück zu geben.
Public Function getCollection() As Collection
getCollection = objCollection
End Function

'Diese Methode liest nur einen Wert aus Collection mit einem bestimmten Key aus.
Public Function getConfigValue(sKey As String) As String
getConfigValue = objCollection(sKey)
End Function

Ich habe dieses Beispiel sehr klein und Übersichtich gehalten. Die Profis unter uns sehen auf anhieb, das es hier noch verbesserungsmöglichkeiten gibt (Error-Exception,…)

 

Viele Grüße und viel Spaß beim Testen.