Hallo zusammen,
ich bräuchte mal eure Ratschläge wie man mit sehr großen Textdateien umgehen kann.
Meine Textdateien können schon 400MB groß sein. Jede Zeile besteht aus mindestens 3 Spalten, die durch Leerzeichen getrennt sind. Eine Datei kann schon mal mehrere Millionen Zeilen haben. Meine bisher größte Datei hatte 19 Mio. Zeilen. Hier ein kleiner Ausschnitt:
0.000 -2.274 0.577
0.000 -2.276 0.577
0.000 -2.278 0.576
0.000 -2.280 0.576
0.000 -2.280 0.576
Mein Ziel ist es, die Datei einzulesen, in Spalten aufzuteilen, mit der dritten Spalte Berechnungen durchführen, die erste Spalte mit anderen Zahlen ersetzen und das ganze dann wieder in einer Textdatei zu speichern.
Mit meiner jetzigen Vorgehensweise klappt das auch wunderbar. Das Problem ist nur der Arbeitsspeicher. 4GB reichen nur für kleine Dateien (vllt. bis zu 150MB), 8GB RAM sind schon besser aus und es gehen auch Dateien mit einer Größe von 400MB.
Nachdem ich das Speicherplatzproblem festgestellt habe, lasse ich keine Daten mehr in einer Datagridview anzeigen. Alles läuft im Hintergrund. Mit einer DGV dauert allein das Einlesen 1 Stunde. Ohne DGV läuft alles wenigstens innerhalb weniger Minuten, aber nur bei 8GB RAM. Nun lese ich alles in eine Datatable ein.
Mein Code zum Einlesen sieht folgendermaßen aus:
Welche Alternative gibts noch zu ner Datatable, die etwas mehr unabhängiger vom Arbeitsspeicher ist?
Mittlerweile bin ich auch offen für andere Programmiersprachen, wenn die mehr versprechen bzw. besser mit solchen Datenmengen umgehen können ohne den ganzen Rechner lahmzulegen
Vielen Dank für eure Hilfe
Gruß
ich bräuchte mal eure Ratschläge wie man mit sehr großen Textdateien umgehen kann.
Meine Textdateien können schon 400MB groß sein. Jede Zeile besteht aus mindestens 3 Spalten, die durch Leerzeichen getrennt sind. Eine Datei kann schon mal mehrere Millionen Zeilen haben. Meine bisher größte Datei hatte 19 Mio. Zeilen. Hier ein kleiner Ausschnitt:
0.000 -2.274 0.577
0.000 -2.276 0.577
0.000 -2.278 0.576
0.000 -2.280 0.576
0.000 -2.280 0.576
Mein Ziel ist es, die Datei einzulesen, in Spalten aufzuteilen, mit der dritten Spalte Berechnungen durchführen, die erste Spalte mit anderen Zahlen ersetzen und das ganze dann wieder in einer Textdatei zu speichern.
Mit meiner jetzigen Vorgehensweise klappt das auch wunderbar. Das Problem ist nur der Arbeitsspeicher. 4GB reichen nur für kleine Dateien (vllt. bis zu 150MB), 8GB RAM sind schon besser aus und es gehen auch Dateien mit einer Größe von 400MB.
Nachdem ich das Speicherplatzproblem festgestellt habe, lasse ich keine Daten mehr in einer Datagridview anzeigen. Alles läuft im Hintergrund. Mit einer DGV dauert allein das Einlesen 1 Stunde. Ohne DGV läuft alles wenigstens innerhalb weniger Minuten, aber nur bei 8GB RAM. Nun lese ich alles in eine Datatable ein.
Mein Code zum Einlesen sieht folgendermaßen aus:
VB.NET-Quellcode
- Function ascii_einlesen() As DataTable
- Dim lines() As String = System.IO.File.ReadAllLines(OpenFileDialog1.FileName, System.Text.Encoding.Default)
- 'Strings (aus txt-Datei mit Punkt) in Single mit Komma umwandeln
- Dim style As System.Globalization.NumberStyles = Globalization.NumberStyles.Any
- Dim culture As System.Globalization.CultureInfo = System.Globalization.CultureInfo.InvariantCulture
- Dim ende As Integer = lines.Count - 1
- ProgressBar1.Maximum = ende
- Dim table As DataTable = New DataTable
- table.Columns.Add("x", GetType(Double))
- table.Columns.Add("y", GetType(Double))
- table.Columns.Add("z", GetType(Double))
- table.Columns.Add("Berechnung", GetType(Double))
- For i = 0 To ende
- Dim spalte() As String = lines(i).Split(" ")
- Single.TryParse(spalte(0), style, culture, spalte(0))
- Single.TryParse(spalte(1), style, culture, spalte(1))
- Single.TryParse(spalte(2), style, culture, spalte(2))
- table.Rows.Add(spalte(0), spalte(1), spalte(2), 0)
- ProgressBar1.Value = i
- Next i
- Return table
- End Function
Welche Alternative gibts noch zu ner Datatable, die etwas mehr unabhängiger vom Arbeitsspeicher ist?
Mittlerweile bin ich auch offen für andere Programmiersprachen, wenn die mehr versprechen bzw. besser mit solchen Datenmengen umgehen können ohne den ganzen Rechner lahmzulegen

Vielen Dank für eure Hilfe
Gruß