Programmieren - alles kontrollieren 4.929 Themen, 20.599 Beiträge

CSV-Dateien vergleichen und gemeinsame Zeilen finden

InvisibleBot / 5 Antworten / Baumansicht Nickles

Hallo,

ich habe 2 CSV-Dateien (Datei A mit 1300 Zeilen, Datei B mit 6700 Zeilen) und muss herausfinden, welche Zeilen in beiden Dateien enthalten sind.

Also in der Form, dass für jede einzelne Zeile aus Datei A verglichen wird, ob diese Zeile auch irgendwo in Datei B steht. Wenn ja, soll die Zeile in eine dritte Datei ausgegeben werden.

Hab eine Weile gegoogelt, aber fast nur Lösungen gefunden die Unterschiede finden. Ich dachte dass der Batchbefehl findstr das eigentlich können sollte, aber der vergleicht wohl nicht jede Zeile einzeln mit der ganzen Datei B sondern die einzelnen Zeilen direkt miteinander. Je nachdem wie ich findstr konfiguriere bekomme ich daher als Ausgabe entweder eine leere Datei oder den kompletten Inhalt von Datei A.

Winmerge zeigt mir die gemeinsamen Zeilen schön an, allerdings habe ich keine Möglichkeit gefunden die dann herauszufiltern und auszugeben.

Kann mir jemand auf die Sprünge helfen?

- Beat the machine that works in your head! -
bei Antwort benachrichtigen
mawe2 InvisibleBot

„CSV-Dateien vergleichen und gemeinsame Zeilen finden“

Optionen

Man könnte beide Dateien in eine Excel-Tabelle kopieren.

Inhalt von Datei A in Spalte A einfügen, Inhalt von Datei B in Spalte B einfügen.

In Spalte C (Zelle C2) liefert die Formel*

=WENNFEHLER(SVERWEIS(A2;$B$2:$B$440;1;0);"")

die Datensätze aus Spalte A, die in Spalte B ebenfalls vorhanden sind.

(Das sieht dann so ähnlich aus wie in WinMerge.)

Den Inhalt von Spalte C kann man kopieren und in eine andere Datei einfügen (ggf. vorher Leerzellen ausfiltern).

Gruß, mawe2

* Die Formel muss natürlich aus C2 nach unten kopiert werden (in meinem Beispiel bis zur Zeile 440, in Deinem Beispiel wahrscheinlich bis zur Zeile 6700 oder 6701). Zeile 1 enthält Spaltenüberschriften.

"When bankers get together for dinner, they discuss Art. When artists get together for dinner, they discuss Money" (Oscar Wilde)
bei Antwort benachrichtigen
InvisibleBot mawe2

„Man könnte beide Dateien in eine Excel-Tabelle kopieren. Inhalt von Datei A in Spalte A einfügen, Inhalt von Datei B in ...“

Optionen

Während ihr bereits weiter diskutiert, hab ich (bzw. mein PC) an der Lösung von mawe2 gearbeitet. Funktioniert einwandfrei, mit einer Einschränkung:

Ich hab in der 3. Spalte jetzt alle doppelt vorhandenen Einträge stehen - und zwar genau da wo sie auch in Spalte 1 stehen. Wenn ich nun versuche, die Spalte 3 zur Weiterverarbeitung in ein neues Dokument zu kopieren, arbeitet der PC ~15 Minuten (in dieser Zeit steht da Excel reagiert nicht) und präsentiert mir dann ein leeres Dokument.

Edit:
Ahh, mein Fehler. Ich hatte einfach die komplette Spalte 3 markiert und dabei übersehen dass Excel das Dokument bei der ersten Berechnung auf über 1Mio Zeilen aufgebläht hat. Hab es jetzt nochmal versucht, dabei nur den befüllten Teil markiert und als "Werte einfügen" kopiert. Tipptop.

Vielen Dank für eure Hilfe, @mawe2 und @Anne0709!

- Beat the machine that works in your head! -
bei Antwort benachrichtigen
Anne0709 InvisibleBot

„CSV-Dateien vergleichen und gemeinsame Zeilen finden“

Optionen

Wie sind die Dateien geöffnet?

Wenn jede Datei zeilenweise in einer Tabellenkalkulation geöffnet wird, kann man den Inhalt einer Zeile mit der anderen Datei vergleichen.
So was mache ich am ehesten mit der Funktion ZÄHLENWENN.  Das ist am schnellsten.

Nicht vergessen, in der Formal den Suchbereich in der anderen Tabelle mit $ zu arretieren - für das einfache Vervielfältigen der Formel.

Hier sind z.B. die Dateien in Tabelle1 und Tabelle2 in der gleichen Datei jeweils in Spalte A  geöffnet.

In Tabelle1 Spalte B:
                                   =ZÄHLENWENN($Tabelle2.A$1:A$letzteZeile;A1)
Die Formel einfach (mit Doppelklick) über alle vorhandenen Zeilen in Tabelle1 vervielfältigen.

Überall, wo eine Zahl größer Null steht, ist die Zeile auch in der anderen Tabelle.
Manchmal ist es nötig, Leerzeichen zu eliminieren, auch nur am Ende oder Anfang einer Zeile.
Auch dafür gibt es Funktionen (Glätten oder TRIM z.B.).

Vielleicht hilft es ja weiter.

Das geht in EXCEL genau wie in Calc.
Ist etwas schneller als SVERWEIS

Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen. Georg Christoph Lichtenberg
bei Antwort benachrichtigen
mawe2 Anne0709

„Wie sind die Dateien geöffnet? Wenn jede Datei zeilenweise in einer Tabellenkalkulation geöffnet wird, kann man den ...“

Optionen
Ist etwas schneller als SVERWEIS

Bei max. 6700 Zeilen dürfte die Zeiteinsparung allerdings kaum messbar sein...

"When bankers get together for dinner, they discuss Art. When artists get together for dinner, they discuss Money" (Oscar Wilde)
bei Antwort benachrichtigen
Anne0709 mawe2

„Bei max. 6700 Zeilen dürfte die Zeiteinsparung allerdings kaum messbar sein...“

Optionen

Vielleicht - wenn denn die Tabellen sortiert sind.

Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen. Georg Christoph Lichtenberg
bei Antwort benachrichtigen