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

Zeilen in TXT löschen, Datenreduktion

Forumthread: Zeilen in TXT löschen, Datenreduktion

Zeilen in TXT löschen, Datenreduktion
07.05.2009 17:57:42
Röfu
Hallo,
ich habe eine Textdatei mit mehreren Spalten mit bis zu 120'000 Zeilen. Beispiel 1. und 2. Zeile, danach alle Werte wie 2. Zeile:
Datum Zeit relative Zeit Soll [°C] Intern [°C] Extern [°C] Leistung [%]
20.04.2009 13:22:51 00:00:00 40.000000 31.610001 24.490000 100.000000
Aufgrund der zu grossen Anzahl zeilen suche ich eine Möglichkeit, entweder nur jede z.B. 20. Zeile der Textdatei ins Excel einzulesen oder ansonsten im Textfile jeweils 19 Zeilen zu löschen, 1 stehen lassen, 19 Zeilen löschen, ...
Bei Excel ist ja bei gut 60'000 Zeilen Schluss. Weniger Daten sind in meinem Fall nicht schlimm. Wir haben ein Aufzeichnugnsgerät und können die Abtastrate leider nicht verstellen!
Wäre für einen Lösungsvorschlag dankbar ;-))
Vielen Dank für Rückmeldungen im Voraus
Röfu
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Quick und Dirty
07.05.2009 19:49:09
Ramses
Hallo
Ungetestet, aber probier mal
Option Explicit

Sub Read_Extern_file_in_Steps()
    'Hilfsvariable für Anzahl Datensätze
    Dim Text1 As String
    'Variablen für den Array nötig
    Dim TxtLines As Long, i As Long, readStep As Long
    Dim TextArr As Variant
    'Sprungweite einstellen
    readStep = 20
    'Schliessen einer geöffneten Datei
    Close #1
    '1. Öffnen der Datei
    'Den Namen und Pfad bitte anpassen
    Open "c:\DeineDatei.txt" For Input As #1
    'Die anzahl ist nötig um die Grösse des Arrays zu deklarieren
    'Zähler auf 0 setzen
    TxtLines = 0
    Do While Not EOF(1) ' Schleife bis Dateiende.
        Input #1, Text1 ' Hilfsvariable zum einlesen verwenden
        ' Zähler hochzählen
        TxtLines = TxtLines + 1
    Loop
    'Schliessen der Datei weil Dateiende erreicht wurde
    Close #1
    'Erneutes Öffnen um zum Dateianfang zu kommen
    Open "c:\DeineDatei.txt" For Input As #1 ' Datei zum Einlesen öffnen.
    'Array neu auf die Anzahl der Linien initialisieren
    ReDim TextArr(TxtLines)
    Close #1
    'Einlesen der Dateien in das Array
    Cells(1, 1) = TextArr(1)
    For i = 2 To TxtLines Step readStep
        Cells(i, 1) = TextArr(i)
    Next i
End Sub

Gruss Rainer
Anzeige
AW: Zeilen in TXT löschen, Datenreduktion
07.05.2009 20:07:11
Uduuh
Hallo,
meine Version:

Sub tttt()
Dim i As Integer, n As Long, strTmp As String, arrDaten(), k As Integer
Dim iFile As Integer
Const strDatei = "c:\test\test.txt"
iFile = FreeFile
Open strDatei For Input As iFile
Do While Not EOF(iFile)
n = n + 1
Loop
Close #iFile
ReDim arrDaten(1 To n, 1 To 7)
n = 0
Open strDatei For Input As iFile
Do While Not EOF(iFile)
Line Input #iFile, strTmp
n = n + 1
For i = 1 To 7
arrDaten(n, i) = Split(strTmp, vbTab)(i - 1)
Next
For k = 1 To 19 'Zeilen überspringen
If EOF(iFile) Then
Exit Do
Else
Line Input #iFile, strTmp
End If
Next
Loop
Close #iFile
Sheets(1).Cells(1, 1).Resize(n, 7) = arrDaten
End Sub


Gruß aus’m Pott
Udo

Anzeige
AW: Zeilen in TXT löschen, Datenreduktion
08.05.2009 08:40:47
Rolf
Hallo Ramses,
vielen Dank für die Hilfe. Leider bekomme ich den Laufzeitfehler 1004!
Und zwar bei fast beim Ende des Codes:
For i = 2 To TxtLines Step readStep
Cells(i, 1) = TextArr(i) 'hier Laufzeitfehler 1004
Next i
Habe zu wenig Kenntnisse, um eine entspr. Anpassung machen zu können. Könntest Du mir evtl. weiter helfen? Zusätzlich ist es so, dass die txt Datei im selben Verzeichnis liegt wie das Workbook. Das heisst, ich würde auf die Pfadangabe des txt gerne verzichten und auf Variante Thisworkbook.path ... wechseln.
Ach ja, hatte ich noch vergessen. Die erste Zeile (Kopfzeile mit Parameterbeschrieb) des txt soll auch übertragen werden, danach lediglich noch jede 20. Zeile.
Freue mich bereits auf eine Antwort!
Gruss
Rolf
===============
Hallo Uduuh,
beim Ausführen Deines Codes schmiert mein Excel leider ab und dann hilft nur noch der Task-Manager!
Konnte leider nicht feststellen, woran es liegt. Evtl. hast Du ja eine Idee.
Vielen Dank vorerst.
Rolf
Anzeige
ein paar Ergänzungen + Korrekturen
08.05.2009 08:57:53
Erich
Hi Rolf,
hier beide Varianten - nicht bildschön, aber wohl lauffähig:

Option Explicit
Sub Read_Extern_file_in_Steps2()
Dim Text1 As String
Dim TxtLines As Long, i As Long, readStep As Long, zz As Long
Dim TextArr As Variant
Const strDatei = "\txttest.txt"
readStep = 20
Close #1
Open ThisWorkbook.Path & strDatei For Input As #1
TxtLines = 0
Do While Not EOF(1) ' Schleife bis Dateiende.
Input #1, Text1 ' Hilfsvariable zum einlesen verwenden
TxtLines = TxtLines + 1
Loop
Close #1
'Erneutes Öffnen um zum Dateianfang zu kommen
Open ThisWorkbook.Path & strDatei For Input As #1 ' Datei zum Einlesen öffnen.
ReDim TextArr(TxtLines)
Do While Not EOF(1) ' Schleife bis Dateiende.
Input #1, Text1
TextArr(i) = Text1 ' Hilfsvariable zum einlesen verwenden
i = i + 1
Loop
Close #1
Cells(1, 1) = TextArr(0)
zz = 1
For i = 1 To TxtLines Step readStep
zz = zz + 1
Cells(zz, 1) = TextArr(i)
Next i
End Sub
Sub tttt2()
Dim i As Integer, n As Long, strTmp As String, arrDaten(), k As Integer
Dim iFile As Integer
Const strDatei = "\txttest.txt"
iFile = FreeFile
Open ThisWorkbook.Path & strDatei For Input As iFile
Do While Not EOF(iFile)
Line Input #iFile, strTmp
n = n + 1
Loop
Close #iFile
ReDim arrDaten(1 To n, 1 To 7)
n = 0
Open ThisWorkbook.Path & strDatei For Input As iFile
Line Input #iFile, strTmp
n = n + 1
For i = 1 To 7
arrDaten(n, i) = Split(strTmp, vbTab)(i - 1)
Next
Do While Not EOF(iFile)
Line Input #iFile, strTmp
n = n + 1
For i = 1 To 7
arrDaten(n, i) = Split(strTmp, vbTab)(i - 1)
Next
For k = 1 To 19 'Zeilen überspringen
If Not EOF(iFile) Then Line Input #iFile, strTmp
Next
Loop
Close #iFile
Sheets(1).Cells(1, 1).Resize(n, 7) = arrDaten
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: ein paar Ergänzungen + Korrekturen
08.05.2009 16:53:05
Rolf
Hallo Erich!
Vielen Dank für die prompte Lösung! Variante 2 funktioniert perfekt!
Bei der ersten Variante werden die Spalten nicht getrennt und zusammen in Spalte A eingetragen.
An dieser Stelle möchte ich eine echtes Lob an dieses Forum aussprechen!!! Meine aktuelles Problem ist gelöst.
Vielen Dank nochmals für Eure Hilfe und schönen Gruss
Rolf
Anzeige
AW: ein paar Ergänzungen + Korrekturen
08.05.2009 17:18:55
Ramses
Hallo
Bei EXCEL Gut gehe ich davon aus, dass du weisst wie man das trennen kann.
Daten - Text in Spalten
Gruss Rainer
;
Anzeige
Anzeige

Infobox / Tutorial

Zeilen in TXT löschen für eine effektive Datenreduktion


Schritt-für-Schritt-Anleitung

Um leere Zeilen zu löschen oder nur jede 20. Zeile aus einer großen TXT-Datei in Excel zu importieren, kannst du VBA (Visual Basic for Applications) verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Klicke auf Einfügen > Modul.

  3. Kopiere den folgenden Code in das Modul:

    Sub Read_Extern_file_in_Steps()
       Dim Text1 As String
       Dim TxtLines As Long, i As Long, readStep As Long
       Dim TextArr As Variant
       Const strDatei = "\deineDatei.txt" ' Passe den Dateipfad an
       readStep = 20
    
       Open ThisWorkbook.Path & strDatei For Input As #1
       TxtLines = 0
       Do While Not EOF(1)
           Input #1, Text1
           TxtLines = TxtLines + 1
       Loop
       Close #1
    
       ReDim TextArr(0 To TxtLines - 1)
       Open ThisWorkbook.Path & strDatei For Input As #1
       i = 0
       Do While Not EOF(1)
           Input #1, TextArr(i)
           i = i + 1
       Loop
       Close #1
    
       For i = 0 To TxtLines - 1 Step readStep
           Cells(i / readStep + 1, 1).Value = TextArr(i)
       Next i
    End Sub
  4. Passe den Dateipfad zur TXT-Datei an.

  5. Schließe den VBA-Editor und führe das Makro aus, indem du auf Entwicklertools > Makros klickst und das Makro auswählst.


Häufige Fehler und Lösungen

  • Fehler 1004: Dieser Fehler kann auftreten, wenn du versuchst, auf eine Zelle zuzugreifen, die nicht existiert. Stelle sicher, dass i innerhalb der Grenzen von TxtLines liegt.
  • Excel stürzt ab: Überprüfe, ob die TXT-Datei zu groß ist oder ob es ein Problem mit dem Code gibt. Achte darauf, dass der Code effizient ist und nicht mehr Zeilen verarbeitet, als Excel bewältigen kann.
  • Leere Zeilen am Ende: Wenn du leere Zeilen am Ende hast, stelle sicher, dass dein Code nicht diese Zeilen einliest.

Alternative Methoden

Wenn du nicht mit VBA arbeiten möchtest, kannst du die TXT-Datei auch in einen Texteditor (wie Notepad++) öffnen und manuell jede 20. Zeile kopieren. Danach kannst du die Daten in Excel einfügen. Beachte jedoch, dass dies bei sehr großen Dateien unpraktisch sein kann.


Praktische Beispiele

Hier sind zwei Beispiele, wie du den oben genannten Code anpassen kannst:

  1. Daten in mehrere Spalten aufteilen: Wenn deine TXT-Datei Tabulatoren verwendet, um die Daten zu trennen, kannst du die Split-Funktion verwenden:

    For i = 0 To TxtLines - 1 Step readStep
       Dim arr() As String
       arr = Split(TextArr(i), vbTab)
       For j = LBound(arr) To UBound(arr)
           Cells(i / readStep + 1, j + 1).Value = arr(j)
       Next j
    Next i
  2. Datenreduktion durch Löschen: Du kannst auch einen anderen Code verwenden, um bestimmte Zeilen zu löschen, anstatt sie nur zu überspringen.


Tipps für Profis

  • Verwende ThisWorkbook.Path: So vermeidest du Probleme mit Dateipfaden, wenn die Datei sich im gleichen Verzeichnis wie das Workbook befindet.
  • Optimiere den Code: Überprüfe den Code regelmäßig auf Effizienz, vor allem bei großen Datenmengen, um die Ladezeiten zu verkürzen.
  • Datenreduktion: Überlege, ob du die Daten vor dem Import in Excel weiter verarbeiten kannst, um die Datenmenge zu reduzieren.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass leere Zeilen in der TXT-Datei nicht importiert werden?
Du kannst den Code so anpassen, dass er die Zeilen überprüft, bevor sie in Excel eingefügt werden.

2. Gibt es eine Möglichkeit, die Zeilen in Excel automatisch zu trennen?
Ja, nachdem du die Daten in Excel importiert hast, kannst du Daten > Text in Spalten verwenden, um die Daten basierend auf einem Trennzeichen (z.B. Tabulator) zu teilen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige