Laden...

Wie am Besten 2 Datensätze vergleichen, ergänzen und mergen?

Erstellt von echdeneth vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.485 Views
echdeneth Themenstarter:in
161 Beiträge seit 2019
vor 4 Jahren
Wie am Besten 2 Datensätze vergleichen, ergänzen und mergen?

Moin, ich würde für ein Projekt 2 Tabellen (oder etwas Tabellenartiges, -ähnliches/Daten in tabellarischer Form)
vergleichen und entsprechend ergänzen,d.h. Daten von einer "Tabelle" in eine andere.
Habe ich bislang mit DataTable's und For-Schleifen.
Geht das auch eleganter? Womit macht Ihr das so?

Unidirektional, Quelle: 2 CSV-Dateien

"Man muß die Dinge so einfach wie möglich machen. Aber nicht einfacher." Albert Einstein

R
1 Beiträge seit 2020
vor 4 Jahren

Hallo echdeneth,

also eine Tabelle ist ja nichts anderes als eine Liste von Objekten mit ihren Eigenschaften.
Ich würde versuchen die Tabellen in Listen von Objekten einzulesen und diese beiden Listen-Objekte kann man dann ganz einfach miteinander vergleichen.

Das wäre so eine Idee von mir.

Gruß,
Raphael

16.835 Beiträge seit 2008
vor 4 Jahren

Kommt halt drauf an, was Deine Kriterien für "identisch" ist.
Pauschal gibts da erstmal wenig.

echdeneth Themenstarter:in
161 Beiträge seit 2019
vor 4 Jahren

Mit ging es ja erstmal um das Vergleichen an sich. Weniger um die Objekte.
Also womit (IList<>, ObservableCollection, DataTable, etc, Pipapo) man ab besten vergleichen kann,
bzw in welcher dieser Klassen Properties enthalten sind, die dies vereinfachen oder effizienter machen.

"Man muß die Dinge so einfach wie möglich machen. Aber nicht einfacher." Albert Einstein

T
2.224 Beiträge seit 2008
vor 4 Jahren

Primär ist dies aber nicht die Aufgabe der jeweiligen Collection als viel mehr die des konkreten Objekts.
Und das ist doch das eigentliche Ziel, Dubletten zu finden.
Dazu musst du eben definieren, wie du doppelte Einträge erkennst und dies ggf. per Equals Implementierung prüfen.

Die Listen oder andere Collection kümmern sich nur um die Datenhaltung, einen anderen Zweck haben diese auch nicht.
Um Vergleiche musst du dich immer selbst kümmern.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

6.911 Beiträge seit 2009
vor 4 Jahren

Hallo echdeneth,

willst du die Lösung allgemein haben od. ganz konkret für deine Business-Klassen?

Ersteres geht dann via [Artikel] Reflection und Metaprogrammierung (od. auch dann per IL-Generierung zur verbesserten Laufzeit), während letzteres selbst dirket programmiert werden kann.

nicht die Aufgabe der jeweiligen Collection als viel mehr die des konkreten Objekts.

Ich würde das sogar vom konkreten Objekt raushalten und ein eigenes "Comparer-Objekt" dafür verwenden.
(Das kann dann ggf. einfach ausgetauscht werden, während die Business-Klasse davon unberührt bleibt und ein POCO sein kann.)

Mir ist aber noch nicht ganz klar worauf der OT hinaus will.

Also womit (IList<>, ObservableCollection, DataTable, etc, Pipapo) man ab besten vergleichen kann,

Was vergleichen?

Ob in der einen Liste die gleichen Objekte wie in der anderen Liste enthalten sind?
Guck dir mal HashSet<T> mit dem passenden IEqualityComparer<T> (selbst zu erstellen, siehe meine Anmerkung zu Beginn), falls die Reihenfolge egal ist.
Sonst schau mal was der Namensraum System.Collections.Generic so beinhaltet.

Od. geht es darum, dass für die einzelnen Objekte in der List die jeweiligen Eigenschaften verglichen werden sollen?

Es gibt dazu auch eine Menge von (NuGet-) Pakten die behilfreich sein können, aber für Empfehlungen wäre es gut zu wissen was genau gewünscht ist.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

echdeneth Themenstarter:in
161 Beiträge seit 2019
vor 4 Jahren

Was vergleichen?

Um konkret zu sein, habe ich 2 CSV-Dateien - a und b.
Bei jedem Eintrag in a soll anhand eines Wertes, Übereinstimmungen in b gesucht,
ein weiterer Wert der gleichen Zeile in b ausgelesen und in a eine weitere Zeile mit diesem Wert ergänzt werden.

Das mit den 2 Datatables und For-Schleifen funktioniert, gefällt mich jedoch nicht so richtig...

Habe Skilllevel: Umschüler 2. Klasse

"Man muß die Dinge so einfach wie möglich machen. Aber nicht einfacher." Albert Einstein

6.911 Beiträge seit 2009
vor 4 Jahren

Hallo echdeneth,

Um konkret zu sein

dann werde doch bitte wirklich konkret 😉
Zeig mal ein Beispiel (die 2 csvs) und was daraus werden soll. Anhand der Beschreibung kann ich dem nicht folgen, welche Zeile und welcher Wert und so...

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

M
368 Beiträge seit 2006
vor 4 Jahren

Bei jedem Eintrag in a soll anhand eines Wertes, Übereinstimmungen in b gesucht,
ein weiterer Wert der gleichen Zeile in b ausgelesen und in a eine weitere Zeile mit diesem Wert ergänzt werden.

Vielleicht empfiehlt es sich das Endergebnis in eine dritte csv-Datei zu schreiben. Evtl. hilft der Thread bei SO weiter: https://stackoverflow.com/questions/5154370/compare-two-csv-file-using-in-c-sharp
Oder man verwendet eine 'datenfreundlichere' Sprache, z.B. Python: https://pypi.org/project/csv-diff/

Goalkicker.com // DNC Magazine for .NET Developers // .NET Blogs zum Folgen
Software is like cathedrals: first we build them, then we pray 😉