Laden...

Vergleichen 2er CSV Dateien

Erstellt von Ploetzi vor 10 Jahren Letzter Beitrag vor 10 Jahren 2.858 Views
Ploetzi Themenstarter:in
313 Beiträge seit 2006
vor 10 Jahren
Vergleichen 2er CSV Dateien

verwendetes Datenbanksystem: LINQ

Hallo,
ich habe 2 CSV Tabellen.
csv1.csv
csv2.csv

csv1 ist wesentlich kleiner(hat weniger Zeilen aber gleiche Spalten) als csv2.csv und ich möchte ermitteln, welche Zeilen von csv1.csv mindestens 2 gleiche Werte in den Spalten haben, wie csv2.csv


    string[] allLines = File.ReadAllLines(csvfilename);
var query = from line in allLines
                        let data = line.Split(';')
                        select new
                        {
                            eci = data[0],
                            email = data[1],
                            plz = data[2],
                            ort = data[3],
                            vorname = data[4]
                        };

So lese ich aktuell ein CSV ein, nun würde ich das gern verknüpfen, in einen LINQ Request.

d.h. wenn zB email, plz und ort gleich sind, dann gibt er das wieder zurück.
Wie mache ich das am effizientesten?

Das Original hat 13 Spalten, aus Gründen der Übersichtlichkeit, habe ich gekürzt.

Grüsse,

16.807 Beiträge seit 2008
vor 10 Jahren

Simpel: Eigene Methode, die zwei Zeilen vergleicht.
Es wird jede Spalte einzeln miteinander vergleichen und bei Gleichheit ein Int-Wert um 1 erhöht.
Sollte der Counter Deinen Ansprüchen übertreffen wird ein True oder eben die Anzahl zurück gegeben. Danach kannst Du weiter vorgehen.

S
902 Beiträge seit 2007
vor 10 Jahren

Hallo,

du kannst auch Intersect in Verbindung mit einem IEqualityComparer verwenden.


class Program
    {
        static void Main(string[] args)
        {
//Simuliert die CSV-Zeilen der beiden Dateien
            List<string[]> lines1 = new List<string[]> { new string[] { "1", "2", "3" }, new string[] { "2", "3", "4" } };
            List<string[]> lines2 = new List<string[]> { new string[] { "1", "2", "3" }, new string[] { "2", "3", "5" } };


            List<string[]> result = lines1.Intersect(lines2,new MyComparer()).ToList();

            Console.WriteLine(result.Count);
            Console.ReadLine();
        }
    }

//Die beiden Methoden müsstest du eben konform ausprogrammieren
    class MyComparer : IEqualityComparer<string[]>
    {
        public bool Equals(string[] x, string[] y)
        {
            if (x.Length != y.Length)
                return false;
            return x[0] == y[0];
        }

        public int GetHashCode(string[] obj)
        {
            return obj[0].GetHashCode();
        }
    }

mfg
Serial

106 Beiträge seit 2011
vor 10 Jahren

Noch als Tipp, zum Einlesen von csv dateien würde ich immer FileHelpers benutzen.

MfG
Rabban