Kontakt
DSVGO
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" auszeichnen.
Die unten gezeigten NewlineString-Funktion bestimmt für einen gegebenen Text, welche Zeichenfolge als Zeilenvorschub benutzt wird.
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.
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