Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: TXT Datei splitten

TXT Datei splitten
21.03.2007 14:27:00
Andre´
Hallo alle zusammen
Ich habe eine TXT-Datei, wo 508728 Zeilen enthalten, sind mal mehr mal weniger. Ich möchte gern mit einem Makro erreichen, dass die Datei gesplittert wird sodass immer nur 60000 Zeilen in einer neuen TXT-Datei kopiert werden und im selben Verzeichnis unter 1.txt abgespeichert wird. Das selbe soll mit den nächsten 60000 Zeilen (also von 60001 bis 120001) geschehen und unter 2.txt abgespeichert werden u.s.w. Insgesamt müssten für die 508728 Zeilen 9 Dateien erstellt werden.
Hat dafür jemand eine Lösung
Danke im voraus
MFG Andre
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: TXT Datei splitten
21.03.2007 15:10:00
Heiko
Hallo Andre,
z.B. so, da ich den Aufbau deiner Datei nicht kenne mußt du mal testen. Bei Nicht Funktion stell mal eine Textdatei mit ein paar Tausend Zeile als Beispiel hier ein.

Sub TextDatSplitten()
Dim strPfad As String, strDatei As String, strhelp As String
Dim arrInput() As String, arrOutput() As String
Dim lngPos As Long, lngHelp As Long, lngZeilen As Long, lngZeilenMax As Long
' Pfad anpassen !!!
strPfad = "H:\EXCEL\EXCEL Privat\Beispiele\Dat_Test_Dateien\"
' Datei Anpassen !!!
strDatei = "Test.txt"
' Anzahl der Gewünschten zeilen anpassen !!!
lngZeilen = 60000
lngPos = 0
Open strPfad & strDatei For Binary As #1
strhelp = Space(LOF(1))
Get #1, , strhelp
arrInput = Split(strhelp, vbCrLf)
Close #1
lngHelp = 0
lngZeilenMax = UBound(arrInput)
For lngPos = LBound(arrInput) To lngZeilenMax
ReDim Preserve arrOutput(lngPos - (lngHelp * lngZeilen))
arrOutput(lngPos - (lngHelp * lngZeilen)) = arrInput(lngPos)
If ((lngPos + 1) Mod lngZeilen = 0) Or lngPos = lngZeilenMax Then
Open strPfad & "TextDat" & lngHelp + 1 & ".txt" For Binary As #1
Put #1, , Join(arrOutput, vbCrLf)
Close #1
lngHelp = lngHelp + 1
Erase arrOutput
End If
Next lngPos
End Sub

Gruß Heiko
PS: Rückmeldung wäre nett !
Anzeige
AW: TXT Datei splitten
21.03.2007 15:15:00
Rudi
Hallo,

Sub SplitTXTDatei()
Dim intCounter As Integer, strPath As String, strTmp As String, lngCountOfLines As Long
strPath = "c:\temp\test\"
intCounter = 1
Open strPath & "test.txt" For Input As #1
Open strPath & intCounter & ".txt" For Output As #2
Do While Not EOF(1)
Input #1, strTmp
lngCountOfLines = lngCountOfLines + 1
If lngCountOfLines Mod 60000 = 0 Then
Close #2
intCounter = intCounter + 1
Open strPath & intCounter & ".txt" For Output As #2
End If
Print #2, strTmp
Loop
Close 1
Close 2
End Sub

Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe
Anzeige
AW: TXT Datei splitten
21.03.2007 15:54:00
Andre´
Hallo,
Vielen Dank!
Heiko, dein Lösung funktioniert prima.
Rudi, dein Code funktioniert nicht wie gewünscht, die Werte aus einer Zeile werden auf 6 weiter Zeilen aufgeteilt.
Nochmals DANK für Eure Beiträge
MFG Andre
AW: TXT Datei splitten
21.03.2007 16:05:02
Rudi
Hallo,
kleiner Fehler. Sorry.

Sub SplitTXTDatei()
Dim intCounter As Integer, strPath As String, strTmp As String, lngCountOfLines As Long
strPath = "c:\temp\test\"
intCounter = 1
Open strPath & "test.txt" For Input As #1
Open strPath & intCounter & ".txt" For Output As #2
Do While Not EOF(1)
Line Input #1, strTmp
lngCountOfLines = lngCountOfLines + 1
If lngCountOfLines Mod 60000 = 0 Then
Close #2
intCounter = intCounter + 1
Open strPath & intCounter & ".txt" For Output As #2
End If
Print #2, strTmp
Loop
Close 1
Close 2
End Sub

Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe
Anzeige
AW: TXT Datei splitten
21.03.2007 19:21:00
Andre´
Hallo Rudi,
Danke für Deine Berichtigung, geht zugar noch schneller als der Code von Heiko :-)
MFG Andre
AW: TXT Datei splitten
22.03.2007 07:27:00
Heiko
Hallo Andre,
wie hast du denn getestet, bei mir braucht mein Code (TextDatei 540000 Zeilen) ca. 10 Sekunden und der von Rudi 24 Sekunden.
Text Datei sieht so aus.
12|12353|10|j|Text|Text|Text
12|12354|11|k|Text|Text|Text
12|12355|12|l|Text|Text|Text
12|12356|13|m|Text|Text|Text
12|12357|14|n|Text|Text|Text
12|12358|15|o|Text|Text|Text
12|12345|16|p|Text|Text|Text
Gruß Heiko
PS: Rückmeldung wäre nett !
Anzeige
AW: TXT Datei splitten
22.03.2007 07:52:11
Andre´
Hallo Heiko,
so sieht meine Txt-Datei aus:
hier die 1.Zeile:
1;1.11.2006 00:00:00;2006,00;44,00;11301,00;"INSPECT";"INSPECT";"3D0 971 100 AQ";"HL";"VW21";"KABELSATZ ND";;2,00;"EA";8,26;16,53
hier die 132884 Zeile:
132884;6.12.2006 00:00:00;2006,00;49,00;11301,00;"STOCK";"ST-JC und ST-ECC";"3C0 885 902 T A64";"HEADREST";"VW09";"KOPFSTUETZE,VOLLST N0X";"A";-130,00;"EA";11,55;-1501,50
Meine Text-Datei hat ca. 80 MB, ca. 140 Zeichen pro Zeile und 508.728 Zeilen.
Bei Rudis Code waren es 11 Sekunden und bei Deinen waren es 57 Sekunden.
MFG Andre
Anzeige
AW: TXT Datei splitten
22.03.2007 09:11:00
Heiko
Hallo Andre,
das hat mir ja nun keine Ruhe gelassen.
Also Deine Datenstruktur ca 84MB
Mein Code 35 Sekunden
Rudis Code 130 Sekunden
Wenn die Datei irgendwo im Netz liegt
Mein Code 14 Sekunden
Rudis Code 9 Sekunden
Wenn die Datei auf der Festplatte (C:) liegt.
Und was lernen wir daraus ?
Nichts ist so wie es aussieht und es kommt darauf an wo die Daten liegen ;-)
Gruß Heiko
PS: Rückmeldung wäre nett !
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

TXT-Datei splitten mit Excel


Schritt-für-Schritt-Anleitung

Um eine .txt-Datei zu splitten, kannst du ein VBA-Makro verwenden. Hier ist eine einfache Anleitung:

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

  2. Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.

  3. Kopiere den folgenden VBA-Code in das Modul:

    Sub TextDatSplitten()
       Dim strPfad As String, strDatei As String, strhelp As String
       Dim arrInput() As String, arrOutput() As String
       Dim lngPos As Long, lngHelp As Long, lngZeilen As Long, lngZeilenMax As Long
    
       ' Pfad anpassen !!!
       strPfad = "H:\EXCEL\EXCEL Privat\Beispiele\Dat_Test_Dateien\"
       ' Datei anpassen !!!
       strDatei = "Test.txt"
       ' Anzahl der gewünschten Zeilen anpassen !!!
       lngZeilen = 60000
       lngPos = 0
    
       Open strPfad & strDatei For Binary As #1
       strhelp = Space(LOF(1))
       Get #1, , strhelp
       arrInput = Split(strhelp, vbCrLf)
       Close #1
    
       lngHelp = 0
       lngZeilenMax = UBound(arrInput)
       For lngPos = LBound(arrInput) To lngZeilenMax
           ReDim Preserve arrOutput(lngPos - (lngHelp * lngZeilen))
           arrOutput(lngPos - (lngHelp * lngZeilen)) = arrInput(lngPos)
           If ((lngPos + 1) Mod lngZeilen = 0) Or lngPos = lngZeilenMax Then
               Open strPfad & "TextDat" & lngHelp + 1 & ".txt" For Binary As #1
               Put #1, , Join(arrOutput, vbCrLf)
               Close #1
               lngHelp = lngHelp + 1
               Erase arrOutput
           End If
       Next lngPos
    End Sub
  4. Passe die Pfadangabe und den Dateinamen an deine .txt-Datei an.

  5. Führe das Makro aus, indem du F5 drückst oder im Menü auf Run > Run Sub/UserForm klickst.

Das Skript wird die Datei splitten und neue .txt-Dateien im angegebenen Verzeichnis erstellen.


Häufige Fehler und Lösungen

  • Fehler: Das Makro erstellt keine Dateien.

    • Lösung: Überprüfe den angegebenen Pfad und stelle sicher, dass die Datei existiert.
  • Fehler: Die Zeilen in der neuen .txt-Datei sind nicht korrekt.

    • Lösung: Stelle sicher, dass du vbCrLf als Trennzeichen verwendest.
  • Fehler: Das Makro läuft zu langsam.

    • Lösung: Überprüfe die Größe der ursprünglichen .txt-Datei und den Speicherort, um die Leistung zu optimieren.

Alternative Methoden

Wenn du keine VBA-Programmierung verwenden möchtest, kannst du auch Tools von Drittanbietern oder Online-Dienste nutzen, um .txt-Dateien zu splitten. Programme wie Notepad++ oder spezialisierte Splitter-Software bieten benutzerfreundliche Oberflächen zur Dateiverwaltung.


Praktische Beispiele

Hier sind einige Beispiele, wie die .txt-Datei aussehen könnte und wie das Splitten funktioniert:

  1. Beispiel für eine .txt-Datei:

    1;1.11.2006 00:00:00;2006,00;44,00;11301,00;"INSPECT";...
    2;1.11.2006 00:00:01;2006,01;45,00;11301,00;"INSPECT";...
  2. Wenn das Makro ausgeführt wird, wird es die Datei in mehrere Teile aufteilen:

    • TextDat1.txt (Zeilen 1-60000)
    • TextDat2.txt (Zeilen 60001-120000)
    • und so weiter.

Tipps für Profis

  • Verwende Option Explicit am Anfang deines VBA-Codes, um sicherzustellen, dass alle Variablen deklariert sind. Dies verhindert viele häufige Fehler.
  • Teste dein Makro zuerst mit einer kleineren .txt-Datei, um sicherzustellen, dass alles wie gewünscht funktioniert.
  • Du kannst das Makro erweitern, um zusätzliche Funktionen zu integrieren, wie z.B. das automatisierte Versenden der splitten Dateien per E-Mail.

FAQ: Häufige Fragen

1. Was ist eine .txt-Datei? Eine .txt-Datei ist eine einfache Textdatei, die unformatierten Text speichert. Sie kann mit jedem Texteditor geöffnet werden.

2. Wie kann ich eine .txt-Datei splitten, ohne VBA zu verwenden? Du kannst auch Software wie Notepad++ oder spezielle Splitter-Tools verwenden, um .txt-Dateien zu teilen. Diese bieten oft eine benutzerfreundliche Oberfläche.

3. Gibt es eine maximale Größe für .txt-Dateien in Excel? Excel hat keine spezifische Begrenzung für .txt-Dateien, jedoch kann die Größe der Datei die Lade- und Verarbeitungszeit beeinflussen.

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