Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Vergleichen 2er CSV Dateien
Ploetzi
myCSharp.de - Member

Avatar #avatar-2940.gif


Dabei seit:
Beiträge: 320

Themenstarter:

Vergleichen 2er CSV Dateien

beantworten | zitieren | melden

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,
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16234

beantworten | zitieren | melden

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.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
serial
myCSharp.de - Member



Dabei seit:
Beiträge: 912

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Rabban
myCSharp.de - Member

Avatar #avatar-3383.jpg


Dabei seit:
Beiträge: 112
Herkunft: Berlin

beantworten | zitieren | melden

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

MfG
Rabban
private Nachricht | Beiträge des Benutzers