VB-Tec.de Visual Basic - Technik, FAQ, Tricks, BeispieleHome / Daten / Strings / Newline Zeilenvorschub-String bestimmen |
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