Ich habe viele große CSV-Dateien (1-10 GB), die ich in Datenbanken importieren. Für jede Datei muss ich die erste Zeile ersetzen, damit ich die Header als Spaltennamen formatieren kann. Meine aktuelle Lösung ist:Schnell erste Zeile der großen Datei ersetzen
using (var reader = new StreamReader(file))
{
using (var writer = new StreamWriter(fixed))
{
var line = reader.ReadLine();
var fixedLine = parseHeaders(line);
writer.WriteLine(fixedLine);
while ((line = reader.ReadLine()) != null)
writer.WriteLine(line);
}
}
Was ist ein schneller Weg, nur Zeile 1 zu ersetzen, ohne durch jede andere Zeile dieser riesigen Dateien zu durchlaufen?
Ich würde das wahrscheinlich nur von der Befehlszeile aus tun. 'copy headerfile + csvfile newfile' Sie könnten eine Batchdatei mit allen Dateien erstellen, die geändert werden müssen. (Oh, außer es sieht so aus, als wüsstest du nicht, was die Header sein werden. Wenn nicht, hilft das nicht.) –
Wenn das Tool, das du verwendest, Eingaben über 'stdin' nimmt: statt einer Datei Sie können einen Stream erstellen, der aus den Headern und dem Hauptteil besteht, und ihn bei Bedarf in Ihr Import-Tool einspeisen. z.B. 'cat headerfile bigfile | import_tool' –
Dies ist sehr empfindlich für die Längen von fixedLine und der ersten Zeile. Kann FixedLine jemals größer sein? Könnte Zeile 2 an das Ende der Datei verschoben werden? –