Tool um csv Dateien zu mergen

CED999

Lieutenant
Registriert
Juni 2011
Beiträge
980
Hallo,

ich suche ein gutes Tool wie ich mehrere csv Dateien mergen kann, damit die fertige Datei den gleichen Hashwert hat wie die Originaldatei (bevor sie gesplittet wurde natürlich).

Ich habe bereits versucht die csvs in dem Ordner mittels:

Code:
copy *.csv blabla.csv

zu mergen, dass ergibt aber Dateien, die auf jeden Fall einen anderen Hash haben. 2 Testdateien (mit jeweils 2 Zeilen), die ich gemerged habe sah hinterher gemerged so aus:

40376,96478;0,04951;20
40377,15493;0,05941;50,0140377,74231;0,0808;5
40377,90568;0,08585;10

Da wurde die 1. Zeile des 2. Dokuments einfach in die 2. Zeile geknallt. Zum anderen - das ist beim C&P hier fürs Forum verloren gegangen - war nach dem letzten Zeichen der 0 noch so ein kleiner "Rechtspfeil" den Notepad++ als "Sub" anzeigt.

Grüße
 
Die Datei nach deinem ersten Versuch sollte sich doch einfach mit der Originaldatei vergleichen lassen - evtl. sind zwischen zwei einzelnen Dateien jetzt Leerzeilen vorhanden oder ne Leerzeile weniger, ...

Den Unterschied kannst du dann ja per Suchen & Ersetzen beheben (ggf. einen Texteditor der reguläre Ausdrücke versteht benutzen).

war nach dem letzten Zeichen der 0 noch so ein kleiner "Rechtspfeil" den Notepad++ als "Sub" anzeigt.
Könntest du auch per Suchen & Ersetzen korrigieren.
 
Nein ich suche nach einer definitiven Methode die zwei csvs merged, so dass sie den gleichen Hashwert hat wie die Summe der Einzelteile. Ich brauche das nämlich um zu testen ob 2 Tools zum splitten von .csvs auch schön alles richtig machen, bzw. welches ich verwenden soll. Da darf nämlich nichts schief gehen.

Da die Ursprungs csvs sehr groß sind 7Mio Zeilen, kann ich die nur mit Hashwert vergleichen. BeyondCompare etc. hat sich daran auch die Zähne ausgebissen. Ist für die vergleichsprogramme zu groß.

Der Test-Ablauf sieht jetzt folgendermaßen aus:

1. Original csv (ca. 7 Mio Zeilen)
2. Splitting tool splittet Datei in jeweils 1Mio Zeilen Dateien
3. Sicheres Merging tool merged die Dateien wieder
4. Vergleich der Hashwerte von gemergeter Datei und Originaldatei


Wenn das passt, kann ich den splitting tools soweit erstmal vertrauen. Dazu brauche ich aber einen Weg die Dateien zu mergen, der die Hashwerte nicht ändert.
 
Ich verstehe das mit dem Hashwert nicht ganz. Csv-files kannst du aber ganz praktisch mit Excel oder LibreOffice Calc bearbeiten und auch zusammenführen

-- EDIT: bei 7mio wirds eng mit Excel und co :freak:
 
Ahhm, wenn du in der Programmiersprache freigestellt bist, kannst du einfach auch einen CSV-"Parser" schreiben (der nur Zeilen erkennen muss).
Da wäre es ein einfaches, das ganze passend hinzubekommen.

BTW: Musst du sowieso am Ende wieder mergen? Weil dann splitte doch alle 16 MB oder so mit fixer Blockgröße, dann geht definitiv nix kaputt.
 
Hi Hancock,

mein Problem ist erstmal nicht das splitten, das will ich ja nur überprüfen ob das Tool gut arbeitet. Normalerweise wird das hinterher nicht mehr gemerged nur jetzt zum testen.

Mein Problem ist jetzt wie die Dinger sehr sauber gemerged bekomme, mein Versuch mit Copy hat nicht gut funktioniert.
 
In einer Shell geht das per cat ganz leicht.

cat a.csv b.csv > output.csv

tut genau was du willst. Vielleicht gibt es sowas für die PowerShell auch. Ansonsten halt Cygwin oder so Späße probieren.
 
Wenn es nur zum einmaligen Evaluieren der Tools ist, kann man ja auch ein Livelinux booten und das mergen und den Hash berechnen. Das wäre mir zumindest lieber als hier noch großartig was zu installieren. Den Output von cat kann man dann auch gleich hashen, anstatt das nochmal extra auf die Platte zu schreiben.
 
Hi Grantig,

nach ewigen rumbrobieren kam ich auf diese Lösung:

Code:
add-content -path merge.txt -value (get-content "*.csv")

Das Problem ist aber wenn ich das auf einem Rechner mit 4GB Ram starte kommt eine Warnung mit zu wenig Ram von Windows, die mich irritiert. Die Dateien sind insgesamt 355MB groß. Wie können bei Verfügbaren 3GB 300Mb den Ram "wegfuttern".

Ist deine Lösung in der Hinsicht besser muss das mal testen.
 
Wenn dus schnell und speicherschonend haben willst, dann musst du Streams nutzen.
Recht viel schneller als so wirds mit der Powershell nicht gehen:
Code:
$dst = "Pfad zur Zieldatei"
$srcDir = "Pfad zum Ordner"

$stream = [System.IO.File]::Create($dst)

ls $srcDir | ? { $_.Name -like "*.csv" } | % {
    $fs = [System.IO.File]::OpenRead($_.FullName)
    $fs.CopyTo($stream)
    $fs.Close()
}

$stream.close()
 
http://community.pentaho.com/
Etwas weiter unten findest du unter Downloads den Punkt Data Integration. Dahinter verbirgt sich das alte Kettle.
Ist eigentlich ein ETL Tool und kann definitiv alles was du brauchst. Daten einlesen, beliebig stückeln, vergleichen, anreichern, zusammenführen und noch seeeeeehr viel mehr. Und das schöne: Dem Ding ists egal ob du mit 2KB oder 2TB arbeitest. Datenbank oder File ist auch wurscht. Ich benutze das seit Jahre als Schweizer Taschenmesser für alles was mit Daten zu tun hat. Hashen kann das teil glaube ich auch.
Braucht ein bisschen sich einzuarbeiten, aber danach ist sowas wie du beschreibst in einer Minute gemacht.

EDIT:
Achso, falls einer nen Editor kennt der mit großen Files klar kommt dann bitte her damit. Ich hab nämlich des öfteren mal z.B. sql Dumps mit etlichen GB.
 
Zuletzt bearbeitet:
Zurück
Oben