Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
804to808
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
804to808
804to808
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

csv Datei alle 65000 Zeilen teilen

csv Datei alle 65000 Zeilen teilen
29.09.2006 16:26:50
M.
Hallo!
Ich habe vor einiger Zeit mal diesen Code bekommen. Der funktionierte auch ganz gut. Jetzt nach einiger Zeit brauchte ich den Code mal wieder und ich bekomme ihn es jetzt nicht mehr so richtig auf die reihe.
Mit dem Code möchte ich eine csv-Datei mit ca. 135000 Zeilen in mehrere Dateien mit max 65000 zeilen (um mit excel zu bearbeiten) teilen lassen.
(Spalten anzahl ca. 15)
Kann es auch daran liegen das die Datei zu groß ist?
======================

Sub Aufteilen()
Dim liZeile As Long, lstrDatName As String, lstrZeile As String, liZeiger As Integer
liZeiger = 1
liZeile = 1
lstrDatName = "XXXXX" & liZeiger & ".csv"
'für "c:\csv-datei.txt" musst Du DEN Speicherpfad und Dateinamen Deiner CSV-Datei eintragen
Open "C:\Dokumente und Einstellungen\Desktop\XXXXX.csv" For Input As #1
'wenn die Teildateien nicht auf "C:\" gespeichert werden sollen, dann musst Du den entprechenden Pfad eintragen
Open "C:\Dokumente und Einstellungen\Desktop\" & lstrDatName For Append As #2
Do While Not EOF(1)
Line Input #1, lstrZeile
If liZeile <= 65000 Then
Print #2, lstrZeile
liZeile = liZeile + 1
Else
Close #2
liZeile = 1
liZeiger = liZeiger + 1
lstrDatName = "XXXXX-" & liZeiger & ".csv"
Open "C:\Dokumente und Einstellungen\Desktop\" & lstrDatName For Append As #2
Print #2, lstrZeile
liZeile = liZeile + 1
End If
Loop
Close
End Sub

============================
mfg Martin

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

Betreff
Datum
Anwender
Anzeige
AW: csv Datei alle 65000 Zeilen teilen
29.09.2006 19:03:27
Erich
Hallo Martin,
der Code ist zwar wohl nicht optimal, aber er müsste funzen.
Was meinst du mit "bekomme ihn es jetzt nicht mehr so richtig auf die reihe"?
Gibt es eine Fehlermeldung? In welcher Codezeile bleibt das Makro hängen?
Stimmen Pfade und Dateinamen?
Ich habe den Code etwas verkürzt, aber das hat wohl keinen Einfluss auf den Fehler:
Sub Aufteilen2()
Dim liZeile As Long, lstrDatName As String, lstrZeile As String, liZeiger As Integer
'für "c:\csv-datei.txt" musst Du Speicherpfad und Dateinamen Deiner CSV-Datei eintragen
Open "C:\Dokumente und Einstellungen\Desktop\XXXXX.csv" For Input As #1
'wenn die Teildateien nicht auf "C:\" gespeichert werden sollen,
'dann musst Du den entprechenden Pfad eintragen
liZeiger = 1
lstrDatName = "XXXXX-" & liZeiger & ".csv"
Open "C:\Dokumente und Einstellungen\Desktop\" & lstrDatName For Output As #2
Do While Not EOF(1)
Line Input #1, lstrZeile
If liZeile >= 65000 Then
Close #2
liZeiger = liZeiger + 1
liZeile = 0
lstrDatName = "XXXXX-" & liZeiger & ".csv"
Open "C:\Dokumente und Einstellungen\Desktop\" & lstrDatName For Output As #2
End If
Print #2, lstrZeile
liZeile = liZeile + 1
Loop
Close
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: csv Datei alle 65000 Zeilen teilen
30.09.2006 06:42:47
Martin
Hi! Danke erst mal!
Der Code macht einfach nichts! Der PC scheint zu arbeiten, und er erstellt auch eine neue Datei, aber die ist immer leer! Der PC arbeitet Stundenlang und nichts passiert.
Ich habe es mal mit einer kürzeren Datei probiert, und da klappt es. Ich Brauche aber die Datei. Mehr als 65xxx Zeilen kann man ja mit excel nicht öffnen.
AW: csv Datei alle 65000 Zeilen teilen
30.09.2006 06:45:43
Martin
Ich habe de Code jetzt probiert. Er hat jetzt die selbe datei noch mal erstellt! Gleiche größe wie die originaldatei und wenn ich die öffne sagt er das die zu lang ist und nicht alles geöffnet werden kann.
mfg Martin
AW: csv Datei alle 65000 Zeilen teilen
30.09.2006 07:20:32
Reinhard
Hi Martin,
***Mehr als 65xxx Zeilen kann man ja mit excel nicht öffnen.***
das sehe ich nicht so.
Option Explicit
Sub Schreiben()
Dim n
Close
Open "c:\test\riesig.txt" For Output As #1
For n = 1 To 200000
Print #1, n
Next n
Close
End Sub
Sub Lesen()
Dim n, Satz, spa
Application.ScreenUpdating = False
Close
Open "c:\test\riesig.txt" For Input As #1
While Not EOF(1)
n = n + 1
Input #1, Satz
If n = 65537 Then
n = 1
spa = spa + 1
End If
Cells(n, spa + 1) = Satz
Wend
Close
Application.ScreenUpdating = True
End Sub

Gruß
Reinhard
ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..
Anzeige
AW: csv Datei alle 65000 Zeilen teilen
30.09.2006 08:15:06
Martin
Was kann ich mit dem Code anfangen? Ich habe den ausprobiert und er schreibt mir die Zahlen von 1-200000 in die Mappe. ?
Ich komme einfach nicht hinter dem Sin. Kannst du mir da nochmal unter dem Arm greifen?
mfg und Danke!
AW: csv Datei alle 65000 Zeilen teilen
30.09.2006 10:57:48
Erich
Hallo Martin,
Reinhards Code zeigt, dass man per VBA auch Dateien mit mehr als 65536 Sätzen einlesen kann,
durch Verteilung auf mehrere Spalten.
Dir nützt das wenig, denn deine Quell-CSV-Datei hat ja vermutlich schon mehrere Spalten.
Die beiden Codes zum Splitten der Dateien funzen.
Sie erstellen weder leere Dateien noch Dateien mit mehr als 65000 Sätzen.
Bist du sicher, dass du beim Erstellen und beim Öffnen/Anschauen
die richtigen Pfade und Dateinamen verwendest?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: csv Datei alle 65000 Zeilen teilen
30.09.2006 14:28:13
Martin
Ich bin mir eigendlich schon sicher!
Ich glaube das hängt alles mit dem zu großen Speicherverbrauch bei diesen Aktionen ab.
Mit kleineren Dateien klappt es einwandfrei. Meine Datei ist 160 mb groß!
Sie besteht aus 11 Spalten, hab aber auch versucht diese Datei mit nur 3 Spalten zu teilen. da ging es auch nicht.
Andersrum habe ich schon mal dateinen (allerdings dat-Dateien und keine csv) mit weit über 500.000 Zeilen geteilt. Da ging es auch! Aber die Dateien waren trotz der vielen Zeilen nicht so "schwer"!
ich habe einen Laptop mit 256 mb Arbeitsspeicher und der Virtuelle Speicher geht bei den Dateien schnell auf 600 mb und mehr! Dann wird er sehr langsam!
Ich denke das es daran liegt!
mfg Martin
Anzeige
AW: csv Datei alle 65000 Zeilen teilen
30.09.2006 17:28:44
Erich
Hallo Martin,
tja, das Verhältnis von Dateigröße zu Arbeitsspeicher ist schon eine wesentliche Info...
Mein Vorschlag: Arbeitsspeicher kaufen oder auf andere Hardware umsteigen.
Fraglich ist für mich auch, wie du diese Datenmengen in Excel verarbeiten willst.
Das dürfte mit einem DB-Programm sehr viel effektiver gehen.
Zwischen dat- und csv-Dateien gibt es - vor allem beim Splitten - überhaupt keinen Unterschied,
beides sind Textdateien. dat-Dateien können genau wie csvs Trennzeichen enthalten.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige