Visual Basic - Technik, FAQ, Tricks, Beispiele

Home / Daten / Strings / Newline

Zeilenvorschub-String bestimmen

Impressum
Kontakt
DSVGO

Newline ist nicht gleich Newline

Problem

Abhängig von Betriebssystem (Windows, Unix, DOS, ...) und u.U. Textprogramm werden unterschiedliche Zeichen benutzt, um das Ende einer Zeile zu markieren. Dies ist übrigens auch der Grund, warum das VB-Statement Line Input bei Dateien aus dem Unix-Bereich nicht nur eine Zeile einliest, sondern gleich die gesamte Datei!

Dieses Problem kann öfter auftreten, als man zuerst denkt: So basieren etwa die meisten WebServer auf Apache/Linux, so dass heruntergeladene Dateien sich eben mit genau diesem "Makel" Grins! auszeichnen.

Lösung

Die unten gezeigten NewlineString-Funktion bestimmt für einen gegebenen Text, welche Zeichenfolge als Zeilenvorschub benutzt wird.

Beispiel

Die folgende Routine verarbeitet einen übergebenen Text Zeilenweise, unabhängig vom verwendeten Zeilenvorschub-String:

Sub NewlineTest(ByRef Text As String)

  Dim NewLine As String
  Dim PosStart As Long
  Dim PosEnd As Long
  Dim Zeile As String

  NewLine = NewlineString(Text)
  PosStart = 1
  Do
  
    'Nächste Zeile rausschneiden:
    PosEnd = InStr(PosStart, Text, NewLine)
    If PosEnd Then
      Zeile = Mid$(Text, PosStart, PosEnd - PosStart)
      PosStart = PosEnd + Len(NewLine)
    Else
      Zeile = Mid$(Text, PosStart)
    End If
    
    'Zeile "verarbeiten":
    MsgBox Zeile
  
  Loop While PosEnd

End Sub

Diese Routine hätte zwar auch einfach mit der Split-Funktion realisiert werden können, allerdings nur mit einem viel größeren Aufwand an Speicher und Rechenzeit.

Code / Quelltext

Die folgende Routine probiert einfach alle denkbaren Möglichkeiten aus, in dem via InStr-Funktion auf das Vorhandensein der Steuerzeichenfolge im Text gesucht wird:

' ©2004 by Jost Schwider, http://vb-tec.de/
Public Function NewlineString( _
    ByRef Text As String, _
    Optional ByRef Default As String = vbNewLine _
  ) As String

  Dim NL As Variant

  'Von Komplex nach Simpel prüfen:
  For Each NL In Array(vbCrLf, vbLf & vbCr, vbCr & vbCr, vbLf, vbCr)
  
    If InStr(Text, NL) Then
      NewlineString = NL
      Exit Function
    End If
  
  Next NL

  'Kein Treffer, also Default zurückgeben:
  NewlineString = Default

End Function

© Jost Schwider, 11.06.2004-11.06.2004 - http://vb-tec.de/newline.htm