Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Prüfen ob Lf oder CrLf in Textdatei vorkommen

Prüfen ob Lf oder CrLf in Textdatei vorkommen
12.02.2017 18:31:19
Andre´
Hallo alle zusammen,
kann man über VBA Abfragen, ob und welche Trennzeichen in einer Textdatei vorhanden sind?
Vielen Dank im Voraus!
MFG Andre
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Prüfen ob Lf oder CrLf in Textdatei vorkommen
12.02.2017 19:12:06
Michael
Hi,
Du kannst ja eine Textdatei komplett als String einlesen und mal "Zeichen zählen".
Mit einem Mini-String geht das natürlich auch:
Sub trennzeichen()
Dim s As String
Dim z As Long, i As Long
s = "Dies ist ein Test" & vbLf & "Das ist die nächste Zeile" & vbCr & _
"Das die übernächste." & vbCrLf
For i = 1 To Len(s): Cells(Asc(Mid(s, i, 1)), 3) = Cells(Asc(Mid(s, i, 1)), 3) + 1: Next
For i = 1 To 255
Cells(i, 1) = i
If i > 32 Then Cells(i, 2) = Chr(i)
Next
End Sub

LF ist 10, CR ist 13, und wenn die Anzahl von CR und LF übereinstimmt, kann man einigermaßen davon ausgehen, daß CRLF verwendet wird.
Gruß,
Michael
Anzeige
AW: Prüfen ob Lf oder CrLf in Textdatei vorkommen
12.02.2017 22:15:50
Piet
Hallo Andre
hier mal ein Makro wo du mit einer MsgBox sofort sehen kannst ob so ein Zeichen vorkommt.
Ich erkenne es aber nur 1x! Den Range Bereich must du bitte anpasseen, bei mir war es C2:C20
mfg Piet

Sub Test_auf_CRLF()
Dim Zelle As Object
'Im Range Bereich eigenen Bereich angeben
For Each Zelle In Range("C2:C20")
Zelle.Select
If InStr(Zelle, vbCrLf) Then MsgBox "CRLF" _
Else If InStr(Zelle, vbLf) Then MsgBox "LF" _
Else If InStr(Zelle, vbCr) Then MsgBox "CR"
Next Zelle
End Sub

Anzeige
AW: Prüfen ob Lf oder CrLf in Textdatei vorkommen
12.02.2017 22:43:40
Andre´
Hallo Piet,
danke für die Meldung.
Nicht genau das was ich suche
Ich öffne eine Text-Datei mit nachfolgenden Ausschnitt Bsp. Code
..
sFilename = Application.GetOpenFilename(Filefilter:="Texte(*.txt),*.txt", Title:="Bitte Datendatei öffnen")
If sFilename = False Then Exit Sub
F = FreeFile
Open sFilename For Binary As #F
sInhalt = Space$(LOF(F))
Get #F, , sInhalt
Close
'hier möchte ich nun Abfragen nach den Lf oder CrLf
'um dann den Split richtig zu machen
ArrayData = Split(sInhalt, vbCrLf) oder ArrayData = Split(sInhalt, vbLf)
...
MFG Andre
Anzeige
Aha, darum geht's eigentlich! Bisher hattest ...
13.02.2017 00:55:39
Luc:-?
…du es versäumt, André,
dein PrimärProblem zu benennen. Das ist aber wichtiger als die Lösung eines TeilProblems eines Lösungs­wegs, den du dir selber vorstellst! Denn jetzt wird's im Grunde genommen ganz simpel:
CR heißt carriage return und ist ein Zeichen (Code 13), das den Wagenrücklauf (einer klassischen Schreibmaschine) veranlasst (und damit antiquiert), setzt also nur an den Anfang der Zeile zurück.
LF heißt line feed und ist ein Zeichen (Code 10), das das Vorrücken auf die nächste Zeile veranlasst. Dabei setzen normaler­weise Drucker und Pgmm ebenfalls an den Zeilen­Anfang (der neuen) zurück.
Die vbKonstanten für diese Zeichen heißen vbCr und vbLf; vbCrLf besteht dagegen aus zwei, nämlich beiden Zeichen. Ein Split mit vbLf als 2.Argument wird also sowohl bei vbLf als auch vbCrLf erfolg­reich sein, nur bleiben im letzten Fall die vbCr erhalten. Wenn die entfallen sollen, musst du sie doch nur löschen, also text = Split(Replace(text, vbCr, ""), vbLf) schreiben! Wozu muss das dann noch per MsgBox gemeldet wdn…‽
Gruß, Luc :-?
Besser informiert mit …
Anzeige
AW: Prüfen ob Lf oder CrLf in Textdatei vorkommen
13.02.2017 00:58:52
Jürgen
Hallo Andre,
Du kannst mit Instr() prüfen, ob ein CrLf vorhanden ist:
If Instr(sInhalt, vbCrLf) > 0 then
Oder Du ersetzt einfach alle CrLf durch LF, danach hast Du in jedem Fall das Lf als Trennzeichen:
sInhalt = replace(sInhalt, vbCrLf, vbLf)
ArrayData = Split(sInhalt, vbLf)
Gruß, Jürgen
Anzeige
AW: Prüfen ob Lf oder CrLf in Textdatei vorkommen
13.02.2017 21:12:50
Andre´
Hallo alle zusammen,
vielen Dank für die großartige Unterstützung, es funktioniert wie gewünscht.
MFG Andre
Na, denn iss ja jut... ;-) owT
15.02.2017 02:44:44
Luc:-?
:-?
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Prüfen von LF und CRLF in Textdateien mit VBA


Schritt-für-Schritt-Anleitung

Um zu überprüfen, ob LF (Line Feed) oder CRLF (Carriage Return Line Feed) in einer Textdatei vorhanden sind, kannst du VBA verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Textdatei öffnen: Verwende den folgenden VBA-Code, um eine Textdatei zu öffnen und ihren Inhalt zu lesen.

    Dim sFilename As String
    Dim sInhalt As String
    Dim F As Integer
    
    sFilename = Application.GetOpenFilename(Filefilter:="Texte(*.txt),*.txt", Title:="Bitte Datendatei öffnen")
    If sFilename = False Then Exit Sub
    
    F = FreeFile
    Open sFilename For Binary As #F
    sInhalt = Space$(LOF(F))
    Get #F, , sInhalt
    Close
  2. Überprüfen der Trennzeichen: Nach dem Einlesen des Inhalts kannst du die Trennzeichen mit InStr() überprüfen.

    If InStr(sInhalt, vbCrLf) > 0 Then
       MsgBox "CRLF gefunden"
    ElseIf InStr(sInhalt, vbLf) > 0 Then
       MsgBox "LF gefunden"
    ElseIf InStr(sInhalt, vbCr) > 0 Then
       MsgBox "CR gefunden"
    End If
  3. Daten aufteilen: Um die Daten auf Basis des Trennzeichens zu splitten, kannst du Split() verwenden.

    Dim ArrayData() As String
    ArrayData = Split(sInhalt, vbCrLf) ' oder vbLf

Häufige Fehler und Lösungen

  • Fehler: Datei kann nicht geöffnet werden
    Stelle sicher, dass der Pfad zur Datei korrekt ist und die Datei nicht von einem anderen Programm verwendet wird.

  • Fehler: Keine Trennzeichen gefunden
    Überprüfe, ob die Textdatei tatsächlich Trennzeichen enthält. Du kannst den Inhalt der Datei in einer Textverarbeitung anzeigen lassen.

  • Fehler: ArrayData ist leer
    Achte darauf, das richtige Trennzeichen zu verwenden. Wenn du vbCrLf verwendest, aber die Datei nur vbLf enthält, wird das Array leer bleiben.


Alternative Methoden

Eine alternative Methode zur Überprüfung von LF und CRLF besteht darin, den Inhalt der Textdatei in eine Excel-Tabelle zu importieren. Hier kannst du dann die Trennzeichen in den Zellen untersuchen. Eine einfache Möglichkeit ist, den Inhalt in eine Zelle einzufügen und dann die FIND()-Funktion in Excel zu verwenden.


Praktische Beispiele

Hier sind einige praktische Beispiele für die Verwendung von VBA zur Überprüfung von LF und CRLF:

  1. Makro zum Zählen der Trennzeichen:

    Sub trennzeichen()
       Dim s As String
       Dim i As Long
       s = "Dies ist ein Test" & vbLf & "Das ist die nächste Zeile" & vbCr & _
           "Das die übernächste." & vbCrLf
       Dim lfCount As Long, crCount As Long
    
       lfCount = Len(s) - Len(Replace(s, vbLf, ""))
       crCount = Len(s) - Len(Replace(s, vbCr, ""))
    
       MsgBox "LF Count: " & lfCount & vbCrLf & "CR Count: " & crCount
    End Sub
  2. Trennzeichen umwandeln:

    sInhalt = Replace(sInhalt, vbCrLf, vbLf)
    ArrayData = Split(sInhalt, vbLf)

Tipps für Profis

  • Verwende vbCrLf als Trennzeichen, wenn du sicher bist, dass deine Textdatei sowohl CR als auch LF enthält.
  • Wenn du nur LF erwartest, kannst du die Verarbeitung vereinfachen, indem du vbLf verwendest.
  • Experimentiere mit Replace(), um unerwünschte Trennzeichen zu entfernen, bevor du die Daten weiterverarbeitest.

FAQ: Häufige Fragen

1. Welche Unterschiede gibt es zwischen LF und CRLF?
LF (Line Feed) ist ein einzelnes Zeichen (ASCII 10), das einen Zeilenumbruch erzeugt, während CRLF (Carriage Return Line Feed) aus zwei Zeichen (ASCII 13 und 10) besteht.

2. Wie kann ich überprüfen, ob ich in einer Excel-Zelle LF oder CRLF habe?
Du kannst die Funktion InStr() in VBA verwenden, um die Zelle auf die entsprechenden Trennzeichen zu überprüfen.

3. Was passiert, wenn ich ein Textformat verwende, das nur LF enthält?
In diesem Fall wird die Verwendung von vbCrLf beim Splitten der Daten nicht funktionieren. Du solltest stattdessen vbLf verwenden.

4. Kann ich ASCII-Werte in VBA verwenden?
Ja, du kannst ASCII-Werte verwenden, um spezifische Zeichen in Strings zu identifizieren, z.B. Chr(10) für LF und Chr(13) für CR.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige