sessai Geschrieben 2. März 2012 Teilen Geschrieben 2. März 2012 Hi, folgendes Problem: es müssen zwei grosse Exceldateien durchlaufen werden. Es soll geprüft werden, ob Spalte A von Exceldatei 1 in Spalte B, C oder D von Exceldatei 2 enthalten ist. Das Ganze ist mittels foreach- Schleifen durch zwei DataTables und der Regex- Funktion sehr zeitintensiv und schreit nach Optimierung! Leider bin ich mit Dictionary nicht wirklich weitergekommen, da Spalte A d. Exceldatei 1 nicht eindeutig ist. Bin für jeden Tipp dankbar! Besten Dank und Gruss! sessai Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Der Kleine Geschrieben 2. März 2012 Teilen Geschrieben 2. März 2012 Einmalig oder regelmäßig? Weil, wenn einmalig, dann dürfte Zeit nicht das Problem sein. Wenn regelmäßig, schreit es nach einer Datenbanklösung. Ist Access vorhanden? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lbm1305 Geschrieben 2. März 2012 Teilen Geschrieben 2. März 2012 Hi, folgendes Problem: es müssen zwei grosse Exceldateien durchlaufen werden. Es soll geprüft werden, ob Spalte A von Exceldatei 1 in Spalte B, C oder D von Exceldatei 2 enthalten ist. Das Ganze ist mittels foreach- Schleifen durch zwei DataTables und der Regex- Funktion sehr zeitintensiv und schreit nach Optimierung! Leider bin ich mit Dictionary nicht wirklich weitergekommen, da Spalte A d. Exceldatei 1 nicht eindeutig ist. Bin für jeden Tipp dankbar! Besten Dank und Gruss! sessai Statt einem Dictionary könnte man eine Collection vom Typ KeyValuePair nutzen. Ein Ansatz wäre hier vielleicht LINQ (to Objects bzw to DataSet / DataTable) --> Join ListeA mit ListeB Dabei würde alle Datensätze herausfallen, bei denen die (INNER) JOIN-Klausel nicht zutrifft. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
streffin Geschrieben 2. März 2012 Teilen Geschrieben 2. März 2012 Hi, folgendes Problem: es müssen zwei grosse Exceldateien durchlaufen werden. Es soll geprüft werden, ob Spalte A von Exceldatei 1 in Spalte B, C oder D von Exceldatei 2 enthalten ist. Das Ganze ist mittels foreach- Schleifen durch zwei DataTables und der Regex- Funktion sehr zeitintensiv und schreit nach Optimierung! Leider bin ich mit Dictionary nicht wirklich weitergekommen, da Spalte A d. Exceldatei 1 nicht eindeutig ist. Bin für jeden Tipp dankbar! Besten Dank und Gruss! sessai Warum nicht per Hashtable / Dictionary ? Als Key den inhalt der Spalte A Zellen, als Value ob es on B,C,D von File 2 enthalten ist. Wenn Spalte A doppelte Einträge hat, dann musst du das ja nicht mehr doppelt prüfen. Ich würd das in das Dictionary schreiben, und halt per Contains prüfen ob es den Wert schon im Dictionary gibt, damit ich nicht in die Exception renn. Ansonsten würd ich eventuell die Daten erstmal sortieren, und z.b. mit Binärer Suche arbeiten, anstatt auf gut Glück durch File 2 zu loopen. Es gibt ja den ein oder anderen Suchalgorhytmus der etwas effektiver ist als bootforce. Gruß Sven Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SilentDemise Geschrieben 2. März 2012 Teilen Geschrieben 2. März 2012 Weil es zu langsam sind. Mit LINQ wird nicht nur vertikal, sondern auch horizontal gesucht. Das bietet dir hier einigen Performance Gewinn. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lilith2k3 Geschrieben 2. März 2012 Teilen Geschrieben 2. März 2012 Könntest Du evtl. ein Beispiel nennen, wie genau das "Suchen" verlaufen soll? Im Grunde geht es darum: Tabelle 1 Spalte A 123456789 Tabelle 2 Spalte B 543217893 Tabelle 2 Spalte C 123456789 Tabelle 2 Spalte D 523453453 Und die Antwort wäre in dem Fall: (D) Meinst Du das so? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
sessai Geschrieben 4. März 2012 Autor Teilen Geschrieben 4. März 2012 Antwort C wäre doch jetzt mein Treffer!? Bei einem Treffer müsste ich den entsprechenden Datensatz inkl. weiteren Spalten zwischenspeichern bzw. später ausweisen. Geht das alles mit einem Dictionary? Das Ganze muss wöchentlich laufen. Eine Oracle- DB steht zur Verfügung. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lilith2k3 Geschrieben 4. März 2012 Teilen Geschrieben 4. März 2012 Huch, äh, natürlich C Die Frage ist: was willst Du mit einem Dictionary erreichen? Letztlich geht es um einen effizienten Suchalgortihmus, der nach Übereinstimmungen sucht. Da in Deinem Fall die komplette Spalte übereinstimmen muss, ist der Algorithmus recht simpel: 1) Prüfe, ob Zeile 1 der Spalte mit der Referenzzeile übereinstimmt. 2) Wenn "Nein", Spalte verwerfen und (wenn vorhanden) mit nächster Spalte weitermachen => (1). 3) Wenn "Ja", dann solange mit dem Spaltenvergleich fortfahren, bis alle relevanten Werte als übereinstimmend erkannt worden sind - bzw. beim ersten Unterschied, Spalte wieder verwerfen und bei (2) wieder einsteigen Fertig. Alternativ: Wenn die Spalten unterschiedliche Länge haben, könntest Du zuerst die Länge abgleichen, dann die erste Zeile überprüfen und dann den Inhalt. Durch die entsprechenden Überprüfungen sparst Du schon ein wenig an Laufzeit, bzw. mit einem break kannst Du den Loop jederzeit verlassen. Das wäre jetzt meine Vorgehensweise aus der Hüfte geschossen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
sessai Geschrieben 5. März 2012 Autor Teilen Geschrieben 5. März 2012 Ich tu mich da ein bisschen schwer das Ganze umzusetzen ... meine Exceldateien sind folgendermassen aufgebaut: Excel 1: Spalte LASTNAME, FIRSTNAME, MIDDLENAME Excel 2: Spalte NAME, VORNAME, GEBURTSNAME zu Excel 2: hier können Werte mehrfach vorkommen, die Spalte KTO wäre mein eindeutiger Schlüssel, meine Idee war dass ich für den Key ein CONCAT von KTO und den restlichen Spalten mache?! Der Check: es soll geprüft werden ob Excel1.LASTNAME, VORNAME und MIDDLENAME in einer der Spalten von Excel 2 vorhanden ist. Und hier frag ich mich ob das mit einer Hashtable so alles möglich ist?! Ich bin dankbar für jeden Tipp! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SilentDemise Geschrieben 5. März 2012 Teilen Geschrieben 5. März 2012 Genau dafür gibt es doch LINQ. Siehe oben.... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
sessai Geschrieben 5. März 2012 Autor Teilen Geschrieben 5. März 2012 tja, und genau da fängt's schon an: dann hab ich zwei DataTables und kann diese mittels LINQ auswerten bzw. mein Ergebnis in eine neue DataTable schreiben? ich hab noch nie mit LINQ gearbeitet, wenn auch schon davon gelesen bzw. gehört. wie fang ich da am besten an? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lilith2k3 Geschrieben 5. März 2012 Teilen Geschrieben 5. März 2012 Windows 101 LINQ Samples Ich bin ja mal gespannt, wie das sich hier entwickelt. Ich hab keinen blassen Schimmer, wieso hier jemand ein Dictionary einsetzen will, bzw. meint, mit LINQ an sein Ziel zu kommen. Vielleicht steh ich auch nur auf dem Schlauch ... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
sessai Geschrieben 6. März 2012 Autor Teilen Geschrieben 6. März 2012 welchen Vorschlag kannst du denn machen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gooose Geschrieben 6. März 2012 Teilen Geschrieben 6. März 2012 Vielleicht kommst du mit dem Open XML SDK 2.0 for Microsoft Office weiter. Du kannst dir mal Using LINQ to Query Tables in Excel 2007 anschauen. Einfach mal ausprobieren. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SilentDemise Geschrieben 6. März 2012 Teilen Geschrieben 6. März 2012 Hast du es denn jetzt mal ausprobiert? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.