Bestimmten Zeichenbereich in einer Zeile aus einer Textdatei lesen

Geschrieben von admin am 31. März 2010 | Abgelegt unter Veröffentlichungen

Eine Textdatei kann manchmal auch einzelne Werte enthalten. Ein Paradebeispiel ist das Logging.

In einem solchen Fall hat zum Beispiel jeder Werte eine bestimmte Länge. Wert 1 ist 15 Zeichen lang und beginnt ab Zeichen 4, Wert 2 ist 10 Zeichen lang und beginnt ab Zeichen sowieso, usw.
Eine solche Textdatei könnte zum Beispiel folgendermaßen aussehen:

Logging Value Status NochnWert
LG-00-abc 54872 OK klausmaus
LG-09-HALLOabc 00100 OK hansfranz
PQ-77-MoinServus 00000 Failed nickklick

Wenn man nun einzelne Werte dieser Beispieldatei benötigt, ist es mit dieser Funktion besonders leicht. In dem Beispiel benötige ich jeweils den zweiten Wert (Value) aus der oben gezeigten Textdatei. Dieser Wert beginnt in jeder Zeile beim 26. Zeichen und ist nicht länger als 5 Zeichen.

Die Funktion:

Public Sub ReadSpecCharInLine(ByRef strCharacters() As String, _
  ByVal strFile As String, _
  ByVal lngCharPoint As Long, _
  ByVal lngLength As Long)
  Dim objFSO As Object
  Dim objFile As Object
  Dim lngCount As Long‘ Fehlerbehandlung aktivieren
  On Error GoTo ErrHandler

‘ Laufparameter für das Redimensionieren des Arrays
  lngCount = 0

‘ Verweis auf das FileSystemObject erstellen
  Set objFSO = CreateObject(“Scripting.FileSystemObject”)

‘ Existiert die Datei überhaupt?
  If objFSO.FileExists(strFile) Then
  ‘ Datei zum Lesen öffnen
  Set objFile = objFSO.OpenTextFile(strFile, 1)

Do Until objFile.AtEndOfStream
  ‘ Array redimensionieren
  ReDim Preserve strCharacters(lngCount)
  ‘ Anzahl-Zeichen von lngCharPoint überspringen
  objFile.Skip (lngCharPoint)
  ‘ Anzahl-Zeichen von lngLength lesen und in das Array speichern
  strCharacters(lngCount) = objFile.Read(lngLength)
  ‘ restliche Zeile überspringen
  objFile.SkipLine
  ‘ Erhöhung des Laufparameter
  lngCount = lngCount + 1
  Loop
  ‘ Datei schließen
  objFile.Close
  End If

ErrHandler:
  ‘ Objekte zerstören
  Set objFile = Nothing
  Set objFSO = Nothing
End Sub

Der Aufruf:
Das obige Beispiel als “C:\log.txt” abspeichern

Dim strCharacterArr() As String
Dim strFile As String
Dim lngCount As Long

strFile = “C:\log.txt”
Call ReadSpecCharInLine(strCharacterArr, strFile, 26, 5)
For lngCount = 0 To UBound(strCharacterArr)
  Debug.Print strCharacterArr(lngCount)
Next lngCount

Sie können hier bei vbarchiv.net für mich voten!

Trackback URI | Kommentare als RSS

Einen Kommentar schreiben

Du musst angemeldet sein, um einen Kommentar zu schreiben.