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

Forumthread: Textdatei zeilenweise lesen

Textdatei zeilenweise lesen
22.03.2008 11:09:00
ioannis
Hallo zusammen,
ich versuche eine Textdatei zeilenweise zu lesen,
Line Input #1, Zeile
weist aber der variablen Zeile auf einmal die ganze Datei zu.
Hat jemand eine Idee warum, bzw. was man dagegen machen kann?
Ich bedanke mich in Voraus.
Freundliche Grüsse
Ioannis

Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Textdatei zeilenweise lesen
22.03.2008 11:16:00
Martin
Hallo
Probier es mal so:
Do Until EOF(1)
Line Input #1, Textzeile
Loop
Close #1
Viele Grüße
Martin

AW: Textdatei zeilenweise lesen
22.03.2008 11:48:05
ioannis
Danke für die schnelle Antwort.
Mit oder ohne Schleife, funktioniert beides nicht, weil beim ersten Durchgang erkennt Line Input #1 nur eine Zeile.
Was mir gerade noch eingefallen ist, die ursprüngliche Datei kann ich nur mit Wortpad öffnen, nachdem ich dort speichere, kann ich sie mit dem Editor öffnen, und dann funktioniert die Schleife...
Die input Dateien sind aber immer im ursprünglichen Format...
Freundliche Grüsse
Ioannis

Anzeige
AW: Textdatei zeilenweise lesen
22.03.2008 11:54:24
Tino
Hallo,
lade doch mal solch eine ursprüngliche Datei
Gruß
Tino

AW: Textdatei zeilenweise lesen
22.03.2008 12:16:00
ioannis
Die Datei ist auf dem Server richtig erkannt, wenn man aber versucht, sie mit dem Editor zu öffnen, bekommt man einen Datensalat...
Gruß
Ioannis

AW: Textdatei zeilenweise lesen
22.03.2008 17:07:26
Volti
Hallo Ioannis,
wahrscheinlich hat Deine Textdatei den "falschen" Zeilenabschluss. Z.B. nur LF (line feed) = CHR$(10)
Den erkennen Word und Excel und andere Programme als Zeileanbschluss an, aber beim Einlesen Deiner Datei mit "Line input" wird der CR (carrige return) =CHR$(13) verlangt.
So "denkt" Deine Routine halt, es wäre nur eine Zeile.
Der CHR$(10) sollte durch CHR$(13) & CHR$(10) erstetzt werden.

Sub DatTest()
Open "D:\MyDatei.txt" For Binary As #1
MyString = Input(LOF(1), #1)
CLOSE #1
MyString = Replace(MyString, Chr$(10), Chr$(13)&CHR$(10))
Open "D:\MyDatei.txt" For Output As #1
Write #1, MyString
Close
End Sub


viele Grüße
Karl-Heinz Voltmann

Anzeige
AW: Textdatei zeilenweise lesen
22.03.2008 11:22:26
Tino
Hallo,
hier mal ein Beispiel.
Dim sFilename As String, sLine As String
Dim F As Long
sFilename = "C:\Text.txt" 'Pfad zur Datei
F = FreeFile
Open sFilename For Input As #F
While Not EOF(F)
Line Input #F, sLine
Wend
Close #F
Gruß
Tino

AW: Textdatei zeilenweise lesen
22.03.2008 12:02:00
ioannis
Hallo Tino,
funktioniert es leider auch nicht, weil die input Datei im "Wortpad" Format ist. Wie kann ich, mit VBA das Format in normalen Textformat ändern?
Freundliche Grüsse
Ioannis

Anzeige
AW: Textdatei zeilenweise lesen
22.03.2008 12:23:00
Tino
Hallo,
hiermit müsste es gehen.

Option Explicit
Sub Lese_TxT_Datei()
Dim strText As String
Dim lngFn As Long, AnZZ As Long, A As Long
Dim strPathAndFileName As String
Dim vntA As Variant
strPathAndFileName = "C:\TextTXT\50919.txt" 'Pfad zur Datei
lngFn = FreeFile
Open strPathAndFileName For Binary As lngFn 'öffne zum lesen
strText = Space(LOF(lngFn))
Get lngFn, 1, strText 'lese komplette Datei
Close lngFn
AnZZ = CountChar(strText, Chr(10))  'Zähle Zeile Trennzeichen
vntA = Split(strText, Chr(10)) 'Text trennen
For A = 0 To AnZZ
Cells(A + 1, 1) = vntA(A) 'einzelne Zeilen schreiben
Next A
Erase vntA 'Speicher freigeben
End Sub
Function CountChar(ByVal SourceString As String, ByVal strChar As String) As Long
CountChar = Len(SourceString) - Len(Replace(SourceString, strChar, ""))
End Function


Gruß
Tino

Anzeige
AW: Textdatei zeilenweise lesen
22.03.2008 12:40:00
ioannis
Ja, es hat geklappt.
Ziemlich aufwendig, über VBA :)
Ich bedanke mich nochmal...
Ioannis

AW: Textdatei zeilenweise lesen
22.03.2008 12:54:54
Tino
Hallo,
dies ist kein aufwendiger Code, da gibt es noch ganz andere.
Gruß
Tino

noch eine Möglichkeit
22.03.2008 14:08:18
Tino
Hallo,
wen du deinen Text nicht unbedingt Zeilenweise lesen willst,
geht es auch hiermit und ist wesendlich schneller.

Sub FileLesen()
Dim MeineTxtDatei As String
MeineTxtDatei = "C:\TextTXT\50919.txt" 'Pfad zur Datei
Application.ScreenUpdating = False
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & MeineTxtDatei _
, Destination:=Range("A1"))
.Refresh BackgroundQuery:=False
End With
Application.ScreenUpdating = True
End Sub


Gruß
Tino

Anzeige
@Tino
22.03.2008 15:26:52
MichaV
Hi Tino,
wenn Du mit Split() ein Datenfeld erzeugst, dann kannst Du mit Ubound() die Anzahl der Elemente im Datenfeld ermitteln. Dann brauchst Du nicht aufwendig vorher die Anzahl der Trennzeichen zählen.
Und Erase mußt Du nicht machen, der Speicher wird nach Beendigung der Prozedur automatisch freigegeben.
Gruß- Micha
PS: Frohe Ostern!

Anzeige
AW: @Tino
22.03.2008 15:57:30
Tino
Hallo Micha,
ich benutze gern das Zählen der Zeichen, weil ich so besser
dass Zeilenumbruchszeichen erkennen kann.
Ich arbeite sehr oft mit Textdateien und dies ist für mich die einfachste Lösung.
Weil die Zeilen Zeilenweise gelesen werden sollten, war mein gedenke,
dass der Code noch weiter ausgebaut werden würde und daher fand ich es für
sinnvoll am ende den Speicher wieder freizugeben.
In der Regel habe ich es nicht drin.
Aber danke für die Info.
Gruß
Tino
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Textdatei zeilenweise lesen in Excel VBA


Schritt-für-Schritt-Anleitung

Um eine Textdatei zeilenweise in Excel VBA einzulesen, kannst Du folgende Schritte befolgen:

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11 in Excel.
  2. Füge ein neues Modul hinzu:

    • Klicke mit der rechten Maustaste auf VBAProject (DeinDateiname) und wähle Einfügen > Modul.
  3. Füge den folgenden Code ein:

    Sub Lese_Texte_Datei()
       Dim strText As String
       Dim lngFn As Long
       Dim AnZZ As Long
       Dim A As Long
       Dim vntA As Variant
    
       ' Pfad zur Textdatei
       Dim strPathAndFileName As String
       strPathAndFileName = "C:\TextTXT\DeineDatei.txt" ' Ändere den Pfad entsprechend
    
       lngFn = FreeFile
       Open strPathAndFileName For Input As lngFn ' Öffne die Datei zum Lesen
    
       ' Lese die Datei zeilenweise
       While Not EOF(lngFn)
           Line Input #lngFn, strText
           ' Hier kannst Du den Text verarbeiten, z.B. in eine Zelle schreiben
           Cells(A + 1, 1).Value = strText
           A = A + 1
       Wend
    
       Close lngFn ' Schließe die Datei
    End Sub
  4. Führe das Makro aus:

    • Klicke in der Menüleiste auf Ausführen > Sub/UserForm ausführen oder drücke F5.

Häufige Fehler und Lösungen

  • Fehler: Die Datei wird nicht korrekt gelesen

    • Lösung: Überprüfe den Zeilenabschluss in der Textdatei. Wenn die Datei nur LF (line feed) verwendet, könnte dies zu Problemen führen. Du kannst das mit folgendem Code beheben:

      Sub Zeilenabschluss_Korrigieren()
      Dim strText As String
      Dim lngFn As Long
      Dim MyString As String
      
      lngFn = FreeFile
      Open "C:\TextTXT\DeineDatei.txt" For Binary As lngFn
      MyString = Input(LOF(lngFn), #lngFn)
      Close lngFn
      
      MyString = Replace(MyString, Chr(10), Chr(13) & Chr(10)) ' Ersetze LF mit CRLF
      Open "C:\TextTXT\DeineDatei.txt" For Output As lngFn
      Write #lngFn, MyString
      Close lngFn
      End Sub
  • Fehler: Die Datei wird als eine einzige Zeile gelesen

    • Lösung: Stelle sicher, dass Du die Datei im richtigen Modus öffnest und die Zeilen korrekt trennst.

Alternative Methoden

Wenn Du die Textdatei nicht zeilenweise lesen möchtest, gibt es schnellere Methoden, um den Inhalt zu importieren:

Sub Importiere_Textdatei()
    Dim MeineTxtDatei As String
    MeineTxtDatei = "C:\TextTXT\DeineDatei.txt" ' Pfad zur Datei
    Application.ScreenUpdating = False
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;" & MeineTxtDatei, Destination:=Range("A1"))
        .Refresh BackgroundQuery:=False
    End With
    Application.ScreenUpdating = True
End Sub

Praktische Beispiele

Hier sind einige Beispiele, wie Du Textdateien mit VBA einlesen kannst:

  1. Einfaches Zeilenlesen:

    Dim Zeile As String
    Open "C:\TextTXT\DeineDatei.txt" For Input As #1
    Do Until EOF(1)
       Line Input #1, Zeile
       ' Verarbeite die Zeile hier
    Loop
    Close #1
  2. Zeilen in ein Array einlesen:

    Dim DatenArray() As String
    DatenArray = Split(strText, vbCrLf) ' Teilt den Text an den Zeilenumbrüchen

Tipps für Profis

  • Verwende Split(): Damit kannst Du eine Textzeile in ein Array aufteilen, um einfacher auf die einzelnen Werte zuzugreifen.
  • Nutze UBound(): Damit kannst Du die Anzahl der Elemente im Array ermitteln, was den Code effizienter macht.
  • Vermeide unnötige Speicherfreigaben: In VBA wird der Speicher automatisch freigegeben, wenn die Prozedur endet.

FAQ: Häufige Fragen

1. Wie kann ich eine Textdatei im richtigen Format speichern?
Du kannst eine Textdatei mit dem Editor oder Wordpad öffnen und dann im richtigen Format (z.B. ANSI) speichern.

2. Was mache ich, wenn die Datei nicht geöffnet werden kann?
Überprüfe den Dateipfad und stelle sicher, dass Du die notwendigen Berechtigungen hast, um die Datei zu lesen.

3. Wie kann ich mit VBA eine CSV-Datei zeilenweise einlesen?
Der Code ist ähnlich wie bei einer Textdatei. Stelle sicher, dass Du die richtige Trennzeichen verwendest.

4. Gibt es Unterschiede beim Einlesen von TXT und CSV-Dateien?
Ja, CSV-Dateien können Kommas oder andere Trennzeichen enthalten. Stelle sicher, dass Du die Trennzeichen im Code entsprechend anpasst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige