Nachdem ich vor kurzem mit meinem CSV File Merger Skript Laufzeitprobleme hatte (beide Files im GB Bereich), musste ich mir eine andere bzw schnellere Lösung überlegen.
Diese habe ich nun mit dem System.IO.StreamReader/Writer umgesetzt. Läuft für zwei Stück CSV Files mit je 500 MB nur wenige Sekunden lang. Somit um ein vielfaches schneller als meine alte Lösung und auch ressourcensparender. Die alte Version ist bei zu großen Files irgendwann wegen zuwenig Speicher abgestürzt. Hoffentlich läuft die neue Version besser.
Syntax:
<#
.VERSION
Produced By : Stefan Perner
URL : www.sqlwithpleasure.blogspot.co.at
Author : Stefan Perner
Date : 2015-09-23
Purpose : CSV mergen
Modifications : no changes, as perfect
.DESCRIPTION
Das Skript kopiert 1-n CSV-Dateien zusammen, nimmt den Header-Satz jedoch nur einmal mit
.EXAMPLE
.\CSVMerger Inpfile1,Inpile2,Inpfile3 Outputfile
#>
param(
[string[]]$CSVFiles,
[string]$OutputFile = "c:\merged.csv"
)
$i = 0
$outs = New-Object System.IO.StreamWriter $OutputFile
foreach($CSV in $CSVFiles) {
$ins = New-Object System.IO.StreamReader $CSV
while( !$ins.EndOfStream ) {
$line = $ins.ReadLine();
if( $i -ne 0 ) {
$outs.WriteLine($line);
}
$i = $i+1;
}
$ins.Close();
}
$outs.Close();
Keine Kommentare:
Kommentar veröffentlichen